MySQL UTF/Unicode 迁移技巧
-
09-06-2019 - |
题
当尝试将 MySQL 表从默认的不区分大小写的瑞典语或 ascii 字符集迁移到 utf-8 时,是否有人有任何提示或陷阱需要注意?我参与的一些项目正在努力实现更好的国际化,而数据库将成为这一变化的重要组成部分。
在我们考虑更改数据库之前,我们将把每个站点转换为使用 UTF-8 字符编码(从最不重要到最重要),以帮助确保所有输入/输出都使用相同的字符集。
谢谢你的帮助
解决方案
一些提示:
- 你的
CHAR
和VARCHAR
列将使用最多 3 倍的磁盘空间。(瑞典语单词的磁盘空间可能不会增加太多。) - 使用
SET NAMES utf8
在读取或写入数据库之前。如果你不这样做,那么你会得到部分乱码。
其他提示
我将浏览以下网站/文章以帮助找到答案。
每个软件开发人员绝对必须了解 Unicode 和字符集的绝对最低要求(没有任何借口!) - Joel 谈软件
当我写这篇文章时,我还刚刚发现了 Derek Sivers @ O'Reilly ONLamp 博客的一篇非常切题的帖子。 将latin1中的MySQL数据转换为utf8 utf-8
注意索引长度限制。如果表是结构化的,请说:
a varchar(255)b varchar(255)键('a','b')
您将超过密钥长度 1000 字节的限制。255+255 可以,但 255*3 + 255*3 不行。
你的
CHAR
和VARCHAR
列将使用最多 3 倍的磁盘空间。
仅当它们充满 latin-1 且序数 > 128 时。否则,UTF-8 增加的空间使用量是最小的。
整理并不总是有利的。您将得到与非元音版本对照的元音,这并不总是正确的。可能想要使用 utf8_bin,但所有内容也区分大小写。
不隶属于 StackOverflow