我正在尝试在我的桌子上添加土耳其语名称,但是当它显示时它给了我?而不是其中任何一个。我在这里缺少什么帮助?这是我的表:
CREATE TABLE IF NOT EXISTS `offerings` (
`dep` varchar(5) CHARACTER SET utf16 COLLATE utf16_turkish_ci DEFAULT NULL,
`grade` varchar(4) CHARACTER SET utf16 COLLATE utf16_turkish_ci DEFAULT NULL,
`section` varchar(3) CHARACTER SET utf16 COLLATE utf16_turkish_ci DEFAULT NULL,
`name` varchar(100) CHARACTER SET utf16 COLLATE utf16_turkish_ci DEFAULT NULL,
`teacher` varchar(50) CHARACTER SET utf16 COLLATE utf16_turkish_ci DEFAULT NULL,
`quota` varchar(2) CHARACTER SET utf16 COLLATE utf16_turkish_ci DEFAULT NULL,
`lec1` varchar(35) CHARACTER SET utf16 COLLATE utf16_turkish_ci DEFAULT NULL,
`lec2` varchar(35) CHARACTER SET utf16 COLLATE utf16_turkish_ci DEFAULT NULL,
`lec3` varchar(35) DEFAULT NULL,
`lec4` varchar(35) DEFAULT NULL,
`lec5` varchar(35) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf16;
正如我在这里选择的答案所建议的那样,对于搜索这个主题的人来说,问题的解决方案就是问题。特别感谢所有为解决我的问题做出贡献的人。
CREATE TABLE IF NOT EXISTS `offerings` (
`dep` varchar(5) NOT NULL,
`grade` varchar(4) COLLATE utf8_unicode_ci NOT NULL,
`section` varchar(3) COLLATE utf8_unicode_ci NOT NULL,
`name` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
`teacher` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
`quota` varchar(2) COLLATE utf8_unicode_ci,
`lec1` varchar(35) DEFAULT NULL,
`lec2` varchar(35) DEFAULT NULL,
`lec3` varchar(35) DEFAULT NULL,
`lec4` varchar(35) DEFAULT NULL,
`lec5` varchar(35) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
答案 0 :(得分:1)
VARCHAR是字符串,而NVARCHARS是Unicode字符串。 NVARCHARS要求每个字符存储更多位,但范围更大。尝试更新您的数据类型。这应该可以解决你的问题。
编辑这个答案错了。 OP明确要求MySQL解决方案,但上述内容仅适用于SQL Server。
答案 1 :(得分:1)
(答案的开头......)
请不要使用utf16;在MySQL表中几乎没有理由这样做。
因此,假设您切换到utf8,请查看我们是否可以摆脱?
问题。
需要在大约4个地方建立utf8。
SHOW CREATE TABLE
验证它们是显式设置为utf8还是默认为表定义。 (仅更改数据库默认是不够的。)SET NAMES utf8
。<meta>
标记。可能发生的事情:
SET NAMES latin1
生效(默认,但错误)CHARACTER SET latin1
(默认,但错误)由于CHARACTER SET
不同意您所显示的内容,因此问题可能更为复杂。请提供
SELECT col, HEX(col) FROM tbl WHERE ...
对于一些带土耳其字符的简单单元格。有了这个,我或许可以弄清楚发生了什么。