gpt4 book ai didi

MySQL UTF8 varchar 列大小

转载 作者:可可西里 更新时间:2023-11-01 07:03:46 25 4
gpt4 key购买 nike

MySQL 文档说,从 5.0 开始,varchar 长度指的是字符单位,而不是字节。但是,我最近遇到了一个问题,即在插入本应适合指定的 varchar 列的值时收到截断数据警告。

我在 v5.1 中用一个简单的表复制了这个问题

mysql> show create table test\G
*************************** 1. row ***************************
Table: test
Create Table: CREATE TABLE `test` (
`string` varchar(10) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

然后我插入了多个具有不同数量 UTF8 字符的 10 个字符值

mysql> insert into test (string) values 
-> ('abcdefghij'),
-> ('ãáéíçãáéíç'),
-> ('ãáéíç67890'),
-> ('éíç4567890'),
-> ('íç34567890');
Query OK, 5 rows affected, 4 warnings (0.06 sec)
Records: 5 Duplicates: 0 Warnings: 4

mysql> show warnings;
+---------+------+---------------------------------------------+
| Level | Code | Message |
+---------+------+---------------------------------------------+
| Warning | 1265 | Data truncated for column 'string' at row 2 |
| Warning | 1265 | Data truncated for column 'string' at row 3 |
| Warning | 1265 | Data truncated for column 'string' at row 4 |
| Warning | 1265 | Data truncated for column 'string' at row 5 |
+---------+------+---------------------------------------------+

mysql> select * from test;
+------------+
| string |
+------------+
| abcdefghij |
| ãáéíç |
| ãáéíç |
| éíç4567 |
| íç345678 |
+------------+
5 rows in set (0.00 sec)

我认为这表明 varchar 大小仍然以字节为单位定义,或者至少在字符单位中不准确。

问题是,我是否正确理解了文档,这是一个错误吗?还是我误解了文档?

最佳答案

的确,VARCHAR 和 CHAR 大小是以字符而不是字节来考虑的。

当我将连接字符集设置为 latin1(单字节)时,我能够重现您的问题。

确保在使用以下命令运行插入查询之前将连接字符集设置为 UTF8:

SET NAMES utf8

如果您不这样做,一个两字节的 UTF8 字符将作为两个单字节字符发送。

您可以考虑更改您的 default client character set .

关于MySQL UTF8 varchar 列大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10401704/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com