`

mysql的字节和字符

 
阅读更多

 1.一个汉字占多少长度与编码有关:
         UTF-8:一个汉字=3个字节
         GBK:一个汉字=2个字节
 2.varchar(n)表示n个字符,无论汉字和英文,Mysql都能存入n个字符,仅是实际字节长度有所区别
 3.MySQL检查长度,可用SQL语言:
        select LENGTH(fieldname) from tablename 来查看
涉及到了字符长度问题,搜索了一下,几乎千篇一律, 所以决定自己测试一下,彻底弄清楚字符长度问题.
编码一律为 UTF-8 编码 :
先来测试一下 php 把一个汉字认作几个字节:

<?php
header('Content-Type:text/html;charset=UTF-8');
$str='我';
echo strlen($str);
?>
输出 3 , 证明在 UTF-8编码下, 一个汉字被认作3个字节长度.

而如果我们用 php 多字节扩展函数 mb_strlen($str,'utf8'); 这个时候输出 1

下面来测试一下 mysql char 和 varchar 字节长度.

创建一个数据库 (txt) :
CREATE DATABASE IF NOT EXISTS txt DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
创建一个表 (test) :
create table test(txt_char char(2) null, txt_varchar varchar(2) null ) ENGINE=MyISAM
确认一下我们表的字符集: 确实是UTF8编码的.

插入两条记录:

INSERT INTO test(txt_char,txt_varchar) VALUES ('abcdef','uvwxyz') , ('我是中国人','北京欢迎你') ;

在看看查询结果:
mysql> select * from test;
+----------+-------------+
| txt_char | txt_varchar |
+----------+-------------+
| ab       | uv          |
| 我是      |北京         |
+----------+-------------+
2 rows in set (0.01 sec)

mysql> select length(txt_char),length(txt_varchar) from test;
+------------------+---------------------+
| length(txt_char) | length(txt_varchar) |
+------------------+---------------------+
               2 |                   2 |
               2 |                   2 |
+------------------+---------------------+
2 rows in set (0.01 sec)

证明 mysql 并不会对超过长度的字符报错,而是直接截断了.

并且 char(2) 和 varchar(2) 都能存储 2个汉字,或者是两个英文字符.
证明 mysql 的 char(n) 可以直接存储 n 个汉字. 而不是 n/3 个
mysql 屏蔽了具体的存储细节,而直接以实际字符的个数来决定 char存储的个数.

分享到:
评论

相关推荐

    统计字符串字节数统计字符串字节数

    统计字符串字节数.rar统计字符串字节数.rar统计字符串字节数.rar统计字符串字节数.rar统计字符串字节数.rar

    MySQL数据库字符集转换及升级全教程

    MySQL 4.1开始把多国语言字符集分的更加详细,所以导致数据库迁移,或则dz论坛升级到4.0后(dz4.0开始使用gbk或utf-8编码)出现乱码问题。本文分析了出现乱码的原因,介绍了MySQL数据库字符集转换及升级的方法。

    按字节截取字符串,结尾加..

    int iCnt = 0; int i_index; int i_len; System.Text.StringBuilder strRet = new System.Text.StringBuilder(); i_len = strVal.Length; byte[] chrbyte;... System.Text.Encoding encoding = System.Text....

    详解mysql中的字符集和校验规则

     在MySQL中,最常见的字符集有ASCII字符集、latin字符集、GB2312字符集、GBK字符集、UTF8字符集等,下面我们简单介绍下这些字符集: ASCII字符集  这个字符集使用1个字节进行编码,一个字节具有8位,总共可以保存...

    MySQL 字符串函数大全

    MySQL 字符串函数大全 对于针对字符串位置的操作,第一个位置被标记为1。 ASCII(str) 返回字符串... ORD(str) 如果字符串str最左面字符是一个多字节字符,通过以格式((first byte ASCII code)*256+(second byte ASCII

    mysql函数大全,mysql

    show variables like '%char%' 查看 MySQL 数据库服务器和数据库字符集 show table status from db显示数据库中表的信息 show full columns from tb查看 MySQL 数据列(column)的字符集。 show charset查看当前安装...

    MySql 5.1 参考手册.chm

    多字节字符支持 5.10.7. 字符集问题 5.10.8. MySQL服务器时区支持 5.11. MySQL日志文件 5.11.1. 错误日志 5.11.2. 通用查询日志 5.11.3. 二进制日志 5.11.4. 慢速查询日志 5.11.5. 日志文件维护 5.12. 在同一台机器...

    MySQL 5.1参考手册

    多字节字符支持 5.10.7. 字符集问题 5.10.8. MySQL服务器时区支持 5.11. MySQL日志文件 5.11.1. 错误日志 5.11.2. 通用查询日志 5.11.3. 二进制日志 5.11.4. 慢速查询日志 5.11.5. 日志文件维护 5.12. 在同...

    mysql获取字符串长度函数(CHAR_LENGTH)

    一个多字节字符算作一个单字符。对于一个包含五个二字节字符集, LENGTH()返回值为 10,而CHAR_LENGTH()的返回值为5。CHARACTER_LENGTH(str) CHARACTER_LENGTH()是CHAR_LENGTH()的同义词。BIT_LENGTH(str) 返回2进制...

    一个byte数组与字符串转化类库

    1.转换一个String字符串为byte数组 2.将字节数组转化为String类型的数据 3.转换一个int为byte数组 4.从字节数组中指定的位置读取一个Integer类型的数据 5.转换一个shor字符串为byte数组 6.从字节数组中指定的...

    MySQL常用字符串函数

    MySQL常用字符串函数 先看下数据库表 lengtt(str) length:获取参数值的字节个数(注意不是字符个数) SELECT LENGTH('haosy') 结果是5 SELECT LENGTH('haosy郝') 结果是8 不是6(是字节个数不是字符个数,因编码...

    MySQL 5.1中文手冊

    多字节字符支持 5.10.7. 字符集问题 5.10.8. MySQL服务器时区支持 5.11. MySQL日志文件 5.11.1. 错误日志 5.11.2. 通用查询日志 5.11.3. 二进制日志 5.11.4. 慢速查询日志 5.11.5. 日志文件维护 5.12. 在同一台机器...

    MYSQL

    9.1.1 用于数据和排序的字符集 9.1.2 增加一个新的字符集 9.1.3 多字节字符支持 9.2 更新日志 9.3 MySQL数据库表可以有多大? 9.4 MySQL数据库表类型 10 从 MySQL 得到最大的性能 ...

    MYSQL安装包官方试用版

    对于CHAR、VARCHAR和TEXT类型,前面的表中的值L和M应解释为字符数目,并且列定义中的这些类型的长度表示字符数目。例如,要想保存一个TINYTEXT值需要L字符+ 1个字节。 要想计算用于保存具体CHAR、VARCHAR或者TEXT列...

    使MySQL能够存储emoji表情字符的设置教程

    原来以往的mysql的utf8一个字符最多3字节,而utf8mb4则扩展到一个字符最多能有4字节,所以能支持更多的字符集。 将Mysql的编码从utf8转换成utf8mb4。 需要 &gt;= MySQL 5.5.3版本、从库也必须是5.5的了、低版本不支持这...

    mysql 字符串函数收集比较全

    对于针对字符串位置的操作,第一个位置被标记为1。 ASCII(str) 返回字符串str的 最左面字符的ASCII代码值...如果字符串str最左面字符是一个多字节字符,通过以格式((first byte ASCII code)*256+(second byte ASCII c

    MySQL中文参考手册.chm

    9.1.1 用于数据和排序的字符集 9.1.2 增加一个新的字符集 9.1.3 多字节字符支持 9.2 更新日志 9.3 MySQL数据库表可以有多大? 9.4 MySQL数据库表类型 10 从 MySQL 得到最大的...

    MySQL 5.1官方简体中文参考手册

    多字节字符支持 5.10.7. 字符集问题 5.10.8. MySQL服务器时区支持 5.11. MySQL日志文件 5.11.1. 错误日志 5.11.2. 通用查询日志 5.11.3. 二进制日志 5.11.4. 慢速查询日志 5.11.5. 日志文件维护 5.12. 在同一台机器...

    MySQL 5.1参考手册中文版

    多字节字符支持 5.10.7. 字符集问题 5.10.8. MySQL服务器时区支持 5.11. MySQL日志文件 5.11.1. 错误日志 5.11.2. 通用查询日志 5.11.3. 二进制日志 5.11.4. 慢速查询日志 5.11.5. 日志文件维护 5.12. 在同...

Global site tag (gtag.js) - Google Analytics