不在SQL表中插入土耳其语字符。选中后显示'xxx ?? xxx'

时间:2015-12-21 15:05:19

标签: mysql sql character-encoding collation

我正在尝试在我的桌子上添加土耳其语名称,但是当它显示时它给了我?而不是其中任何一个。我在这里缺少什么帮助?这是我的表:

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;

2 个答案:

答案 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>标记。

可能发生的事情:

  • 你有utf8编码的数据(好)
  • SET NAMES latin1生效(默认,但错误)
  • 该列已声明CHARACTER SET latin1(默认,但错误)

由于CHARACTER SET不同意您所显示的内容,因此问题可能更为复杂。请提供

 SELECT col, HEX(col) FROM tbl WHERE ...

对于一些带土耳其字符的简单单元格。有了这个,我或许可以弄清楚发生了什么。

另外,Reference notes on encodings