簡體   English   中英

在SQL表中未插入土耳其字符。 選中時顯示“ xxx ?? xxx”

[英]Not inserting Turkish characters in SQL table. Displays 'xxx??xxx' when selected

我正在嘗試在桌子上添加土耳其語名稱,但是顯示時它給了我? 而不是任何一個。 有什么幫助我在這里想念的嗎? 這是我的桌子:

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;

VARCHAR是字符串,而NVARCHARS是Unicode字符串。 NVARCHARS每個字符需要更多位來存儲,但范圍更大。 嘗試更新您的數據類型。 這應該可以解決您的問題。

編輯這個答案是錯誤的。 OP明確要求提供MySQL解決方案,但以上內容僅適用於SQL Server。

(答案的開頭...)

請不要使用utf16; 在MySQL表中實際上沒有任何理由。

因此,假設您切換到utf8,讓我們看看是否可以擺脫? 問題。

utf8需要在大約4個地方建立。

  • 數據庫中的列-使用SHOW CREATE TABLE來驗證它們是否已顯式設置為utf8,或者是否是表定義中的默認值。 (更改數據庫默認值是不夠的。)
  • 客戶端和服務器之間的連接。 請參閱SET NAMES utf8
  • 您擁有的字節。 (可能是這種情況。)
  • 如果要在網頁中顯示文本,請檢查<meta>標簽。

可能發生了什么:

  • 您有utf8編碼的數據(很好)
  • SET NAMES latin1生效(默認,但錯誤)
  • 該列已聲明為CHARACTER SET latin1 (默認值,但錯誤)

由於“ CHARACTER SET與您所顯示的內容不一致,因此問題可能更加復雜。 請提供

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

一些帶有土耳其語字符的簡單單元格。 這樣,我也許可以弄清楚發生了什么。

另外, 有關編碼的參​​考說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM