`

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存储的个数.

分享到:
评论

相关推荐

    mysql 计算字符串相似度

    2. **利用 MySQL 的内置函数**:例如,尝试使用 `UNHEX()` 和 `HEX()` 函数来处理多字节字符。 3. **缓存机制**:对于频繁查询的字符串组合,可以考虑使用缓存来提高性能。 通过以上方法,可以在保持准确性的同时...

    MYSQL修改字符集默认问题

    在MySQL数据库管理与维护的过程中,修改字符集是一个常见...通过以上步骤,你可以有效地解决MySQL中的字符集修改问题,确保数据的一致性和准确性。希望这些信息能帮助你在实际工作中更加高效地管理和维护MySQL数据库。

    mysql字符集转换

    ### MySQL字符集转换详解 #### 一、引言 在MySQL数据库管理中,字符集的正确设置至关重要。它直接影响到数据的存储与检索效果,尤其是对于...希望本文能够帮助读者更好地理解和掌握MySQL字符集转换的方法和技术要点。

    MySQL字符串操作

    如果是一个多字节字符,以格式返回 ((first byte ASCII code)*256+(second byte ASCII code))[*256+third byte ASCII code...]. 例如: mysql&gt; select ORD('2'); -&gt; 50 CONV(N,from_base,to_base) CONV(N,from_...

    MySQL字符集

    UTF-8的一个优点是它具有变长编码,较短的英文字符占用较少的空间,而较长的中文字符占用更多空间,但仍然比单字节字符集节省存储空间。 `NULL`在MySQL中表示一个未知的或未定义的值。在定义列时,可以指定是否允许...

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

    这些示例展示了如何在不同编程语言中计算字符串的字节数,但要注意,对于包含多字节字符(如UTF-8中的非ASCII字符)的字符串,字节数会根据编码方式变化。因此,当你进行数据传输或存储时,了解字符串的编码和字节数...

    Mysql字符集设置原理及常见问题解决

    UTF8通常比GBK更节省空间,因为它使用变长编码,但某些特定的多字节字符可能需要更多空间。 3. 兼容性问题:在升级数据库或者迁移数据时,如果不注意字符集的兼容性,可能会导致数据丢失或乱码。 4. 搜索效率:在...

    mysql保存微信昵称特殊字符的方法

    这是因为MySQL的默认UTF-8字符集(实际上是`utf8`,并非完全标准的UTF-8)仅支持最多3字节的字符,而一些特殊字符,如Emoji,需要4字节的编码空间。这个问题的根本在于MySQL的`utf8`字符集设计时并未考虑到4字节的...

    MySQL存储全角字符和半角字符的区别

    MySQL存储全角字符和半角字符的区别主要体现在字符编码、占用空间和显示效果上。在MySQL中,字符数据类型如`CHAR`、`VARCHAR`等是用来存储文本信息的,它们会根据选择的字符集来处理字符。对于半角字符,通常指的是...

    带你5分钟读懂MySQL字符集设置

    MySQL字符集和字符序是数据库管理系统中至关重要的概念,它们决定了数据如何被编码和比较。字符集是指一组特定的字符及其对应的编码,而字符序则是规定字符比较的规则。理解并正确设置这两个参数对于避免“乱码”...

    mysql字符集1

    MySQL字符集是数据库管理系统中处理文本数据的关键组件,它决定了数据如何被编码、存储和检索。MySQL 5.6.21版本支持多种字符集,这些字符集可以通过查询`information_schema`库中的`character_sets`表来查看。`...

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

    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在处理某些特定字符集时可能会遇到兼容性问题,例如UTF-8的4字节编码支持不足,导致某些非拉丁语系字符无法正确存储和检索。 ### 乱码相关问题处理 针对“mysql客户端插入中文内容后再查询却返回乱码”等问题...

    mysql的字符串函数

    ORD(str) 函数如果字符串 str 最左面字符是一个多字节字符,通过以格式((first byte ASCII code)*256+(second byte ASCII code))[*256+third byte ASCII code...]返回字符的 ASCII 代码值来返回多字节字符代码。...

    MySQL的字符串函数使用说明

    5. CHAR_LENGTH(str) 和 CHARACTER_LENGTH(str): 这两个函数都是等价的,返回字符串`str`的字符长度,考虑多字节字符集。与`LENGTH()`不同,它们不会将多字节字符视为多个字符。 6. COMPRESS(string_to_compress): ...

    mfc调用的多字节的 mysql 操作封装库

    在“标签”中,“mysql c++ 多字节”进一步强调了这个库的核心特性:它是用C++编写的,专为MFC设计,并且支持多字节字符集。这意味着开发者可以利用C++的面向对象特性,同时不用担心字符编码问题,从而在多语言环境...

    mysql常用字符串函数、字符串处理函数大全

    对于多字节字符,每个字符可能占用多个字节。 16. `LOAD_FILE(file_name)`:读取指定文件的内容并返回为字符串。 17. `LOCATE(substr, str)` / `LOCATE(substr, str, pos)`:查找`substr`在`str`中的位置,第二个...

    字符集相关学习探讨(字符集相关定义以及MySQL中字符集分析)

    MySQL数据库中涉及多个与字符集相关的变量,这些变量对于确保数据的正确存储和检索至关重要。 1. **character_set_client**: 客户端字符集,用于客户端发送的SQL语句以及传输过程中的字符集设置。此变量可以通过...

    MySQL数据库字符集的问题研究.pdf

    - 所有字符(包括英文和中文)均使用双字节编码; - 包含了GB2312中的全部简体字符,并且新增了许多繁体字符。 ##### 2.3 GB2312字符集 - **定义**:GB2312是中国最早的国家标准汉字编码,主要支持简体中文。 - *...

Global site tag (gtag.js) - Google Analytics