Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 存储格式化的值,或者在请求时格式化,哪个更好_Mysql_Sql - Fatal编程技术网

Mysql 存储格式化的值,或者在请求时格式化,哪个更好

Mysql 存储格式化的值,或者在请求时格式化,哪个更好,mysql,sql,Mysql,Sql,像phone这样的值,我们应该存储已格式化的数据,还是在请求时格式化? 哪一种性能更好 在像巴西这样的国家,我们的代码是55,城市代码是11,但是我们的电话号码是5或4位数加4位数,比如: +55(11)9999-9999或+55(21)9999-9999,存储未格式化的值,少数国家/地区,您的国家/地区代码有1、2、3或4位数字,请求时将很难格式化,因为! 存储格式化后,我将使用更多的存储空间,INT嗯,想想一台典型的现代台式电脑可以每秒做6或70亿次计算。< /P> 数据应该以最好的格式存储

像phone这样的值,我们应该存储已格式化的数据,还是在请求时格式化? 哪一种性能更好


在像巴西这样的国家,我们的代码是55,城市代码是11,但是我们的电话号码是5或4位数加4位数,比如: +55(11)9999-9999或+55(21)9999-9999,存储未格式化的值,少数国家/地区,您的国家/地区代码有1、2、3或4位数字,请求时将很难格式化,因为! 存储格式化后,我将使用更多的存储空间,INT
抱歉,我的英语。

< P>嗯,想想一台典型的现代台式电脑可以每秒做6或70亿次计算。< /P> 数据应该以最好的格式存储,以便在数据库中执行以下操作:搜索、排序、比较。电话号码可能以不同的格式从用户界面输入(例如“(800)555-1212”、“800-555-1212”、“800-555-1212”、“800-555-1212”、“8005551212”)。允许不同的功能,如匹配,将在存储到数据库之前剥离格式,然后在显示时进行预绑定

格式化电话号码的处理器开销很小:可能是40或50个处理器周期。例如,在i5上,这将是远低于一微秒的时间


所以我会投票赞成:存储RAW,显示漂亮.< /P> < P>,考虑到一个典型的现代台式计算机每秒可以做6或70亿次计算。 数据应该以最好的格式存储,以便在数据库中执行以下操作:搜索、排序、比较。电话号码可能以不同的格式从用户界面输入(例如“(800)555-1212”、“800-555-1212”、“800-555-1212”、“800-555-1212”、“8005551212”)。允许不同的功能,如匹配,将在存储到数据库之前剥离格式,然后在显示时进行预绑定

格式化电话号码的处理器开销很小:可能是40或50个处理器周期。例如,在i5上,这将是远低于一微秒的时间


因此,我会投票赞成:存储原始数据,显示漂亮。

由于格式化是一个独立于数据存储的显示问题,并且由于同一数据段的格式可能因环境而异,因此您应该将未格式化的数据存储在数据库中,并在应用程序中对其进行适当的格式化


您可以构建一个应用程序,在其中可以从不同的地区查看相同的数据。相同金额的钱、时间点或数字可能需要为不同的用户设置不同的格式,这取决于他们来自哪里。您的数据模型(MySQL是其中的一个重要部分)根本不应该处理格式化,否则表示层将需要将数据从一种格式转换为另一种格式。这是次优的,可能会导致可维护性噩梦。这就是为什么您应该努力以独立于演示文稿格式的方式存储数据。

由于格式是独立于数据存储的显示问题,并且由于同一数据段的格式可能因环境而异,因此您应该在数据库中存储未格式化的数据,并在应用程序中对其进行适当的格式化


您可以构建一个应用程序,在其中可以从不同的地区查看相同的数据。相同金额的钱、时间点或数字可能需要为不同的用户设置不同的格式,这取决于他们来自哪里。您的数据模型(MySQL是其中的一个重要部分)根本不应该处理格式化,否则表示层将需要将数据从一种格式转换为另一种格式。这是次优的,可能会导致可维护性噩梦。这就是为什么您应该努力以独立于演示文稿格式的方式存储数据。

我只将电话号码存储为数字。这会占用数据库中的空间。格式可以更改。此外,在编写简洁的代码和重用代码时,也需要努力做到这一点。 此函数在数据库表中占用的空间少于100个左右的格式化电话号码

    function format_phone($phone = '', $convert = false, $trim = true){
        // If we have not entered a phone number just return empty
        if (empty($phone)) {
            return '';
        }

        // Strip out any extra characters that we do not need only keep letters and numbers
        $phone = preg_replace("/[^0-9A-Za-z]/", "", $phone);

        // Do we want to convert phone numbers with letters to their number equivalent?
        // Samples are: 1-800-TERMINIX, 1-800-FLOWERS, 1-800-Petmeds
        if ($convert == true) {
            $replace = array('2'=>array('a','b','c'),
                     '3'=>array('d','e','f'),
                         '4'=>array('g','h','i'),
                     '5'=>array('j','k','l'),
                                     '6'=>array('m','n','o'),
                     '7'=>array('p','q','r','s'),
                     '8'=>array('t','u','v'),
                     '9'=>array('w','x','y','z'));

            // Replace each letter with a number
            // Notice this is case insensitive with the str_ireplace instead of str_replace 
            foreach($replace as $digit=>$letters) {
                $phone = str_ireplace($letters, $digit, $phone);
            }
        }

        // If we have a number longer than 11 digits cut the string down to only 11
        // This is also only ran if we want to limit only to 11 characters
        if ($trim == true && strlen($phone)>11) {
            $phone = substr($phone, 0, 11);
        }                        

        // Perform phone number formatting here
        if (strlen($phone) == 7) {
            return preg_replace("/([0-9a-zA-Z]{3})([0-9a-zA-Z]{4})/", "$1-$2", $phone);
        } elseif (strlen($phone) == 10) {
            return preg_replace("/([0-9a-zA-Z]{3})([0-9a-zA-Z]{3})([0-9a-zA-Z]{4})/", "($1) $2-$3", $phone);
        } elseif (strlen($phone) == 11) {
            return preg_replace("/([0-9a-zA-Z]{1})([0-9a-zA-Z]{3})([0-9a-zA-Z]{3})([0-9a-zA-Z]{4})/", "$1($2) $3-$4", $phone);
        }

        // Return original phone if not 7, 10 or 11 digits long
        return $phone; 
    }

我只将电话号码存储为数字。这会占用数据库中的空间。格式可以更改。此外,在编写简洁的代码和重用代码时,也需要努力做到这一点。 此函数在数据库表中占用的空间少于100个左右的格式化电话号码

    function format_phone($phone = '', $convert = false, $trim = true){
        // If we have not entered a phone number just return empty
        if (empty($phone)) {
            return '';
        }

        // Strip out any extra characters that we do not need only keep letters and numbers
        $phone = preg_replace("/[^0-9A-Za-z]/", "", $phone);

        // Do we want to convert phone numbers with letters to their number equivalent?
        // Samples are: 1-800-TERMINIX, 1-800-FLOWERS, 1-800-Petmeds
        if ($convert == true) {
            $replace = array('2'=>array('a','b','c'),
                     '3'=>array('d','e','f'),
                         '4'=>array('g','h','i'),
                     '5'=>array('j','k','l'),
                                     '6'=>array('m','n','o'),
                     '7'=>array('p','q','r','s'),
                     '8'=>array('t','u','v'),
                     '9'=>array('w','x','y','z'));

            // Replace each letter with a number
            // Notice this is case insensitive with the str_ireplace instead of str_replace 
            foreach($replace as $digit=>$letters) {
                $phone = str_ireplace($letters, $digit, $phone);
            }
        }

        // If we have a number longer than 11 digits cut the string down to only 11
        // This is also only ran if we want to limit only to 11 characters
        if ($trim == true && strlen($phone)>11) {
            $phone = substr($phone, 0, 11);
        }                        

        // Perform phone number formatting here
        if (strlen($phone) == 7) {
            return preg_replace("/([0-9a-zA-Z]{3})([0-9a-zA-Z]{4})/", "$1-$2", $phone);
        } elseif (strlen($phone) == 10) {
            return preg_replace("/([0-9a-zA-Z]{3})([0-9a-zA-Z]{3})([0-9a-zA-Z]{4})/", "($1) $2-$3", $phone);
        } elseif (strlen($phone) == 11) {
            return preg_replace("/([0-9a-zA-Z]{1})([0-9a-zA-Z]{3})([0-9a-zA-Z]{3})([0-9a-zA-Z]{4})/", "$1($2) $3-$4", $phone);
        }

        // Return original phone if not 7, 10 or 11 digits long
        return $phone; 
    }

我通常喜欢在报告/显示上格式化数据,在某些情况下可以节省空间并提高性能

最终我认为这取决于你如何使用这些数据。如果电话号码不用于分析,而只是详细信息,那么存储格式化字符串不会有多大影响


如果要使用该字段执行任何计算,一定要将其保存在适当的数据类型中。Name/Address/Phone/Zip是我经常保留为字符串的字段,没有什么影响。

我通常喜欢在报告/显示上格式化数据,在某些情况下可以节省空间并提高性能

最终我认为这取决于你如何使用这些数据。如果电话号码不用于分析,而只是详细信息,那么存储格式化字符串不会有多大影响

如果要使用该字段执行任何计算,一定要将其保存在适当的数据类型中。Name/Address/Phone/Zip是我经常保留为字符串的字段,没有什么影响。

请求时格式化! 任何接受过一点点正式学术数据库培训的人都会告诉你这一点。如果这种格式化发生在数据库客户端,而不是数据库本身,那就更好了。

请求时格式化! 有人有m吗