gpt4 book ai didi

mysql - MySQL 中完全支持 UTF8 的数据类型和排序规则

转载 作者:行者123 更新时间:2023-11-30 00:39:18 26 4
gpt4 key购买 nike

我将在表中存储数据(主要是维基百科页面标题),该表可以包含需要完整 UTF8 的字符。我正在使用的架构是

CREATE TABLE `en_brands` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL,
`name_encoded` varchar(255) NOT NULL,
`inserted` datetime NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `name` (`name`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT

如您所见,name 只有 191 个字符长。当使用较大的值时,MySQL 会拒绝创建UNIQUE KEY name,因为此类键的长度只能是 767 字节。我的问题是什么:

  • name_encoded 至少为 TEXT 才能完全存储 URL 编码(在 PHP rawurlencode 中)UTF8 字符串? (我认为在最坏的情况下,255 个字节长的字符串可以由 3060 个字符长的 URL 表示 - 255 个字符 x 4 个字节 x 3 个字符用于编码表示)
  • 我对 name_encoded 使用哪种排序规则重要吗(我认为不是,因为 URL 编码的它们应该适合 latin)
  • 我应该使用哪种数据类型和排序规则来存储至少 255 个字符并完全支持 UTF8,并创建一个 UNIQUE KEY(我想使用允许母语排序的排序规则)

顺便说一句:我在 Debian Wheezy 上使用 MySQL 5.6 Percona

最佳答案

回答我的问题:

has name_encoded to be at least TEXT to fully store an URL-encoded (in PHP rawurlencode) UTF8 string?

当然,URL 编码的 UTF8 字符串最长可达 3060 个字符,因此需要 TEXT

does it matter which collation I use for name_encoded (I think not, because URL-encoded they should fit into latin)

URL 编码字符串适合 ASCII

which data type and collation should I use for name to store at least 255 characters with full UTF8 support and to create an UNIQUE KEY nevertheless

这是不可能的,因为 UNIQUE KEY 中文本列的长度限制

我首先通过执行SELECT来检查重复项,因此不需要UNIQUE KEY,但应用程序必须确保数据完整性

关于mysql - MySQL 中完全支持 UTF8 的数据类型和排序规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21909148/

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