Incorrect string value (emoji / kodlama)
Birinin adında emoji vardı ve veritabanın emoji saklayamıyor.
Önce şunu yap
Veritabanın ve bağlantısı utf8mb4 kullanmalı. Bir kerelik bir değişiklik.
Ne anlama gelir
Sütunun karakter setinin temsil edemeyeceği bir karakter yazıldı. Mesajdaki \xF0\x9F ile başlayan bayt dizisi bir emojidir: dört bayt, ve MySQL'in eski utf8'i onları saklayamayan üç baytlık bir kodlamadır.
Neden olur
Ne sıklıkla doğru cevap olduğuna göre sıralı.
- 1
Bir oyuncu adında ya da sohbet mesajında emoji
En yaygın biçim. Discord ve Steam adları onlarla dolu.
- 2
Veritabanı utf8mb4 değil utf8
MySQL'in
utf8'i her zaman kısmi bir UTF-8 olmuştur. Gerçek olanıutf8mb4. - 3
Bağlantı karakter seti ayarlanmamış
Tablo utf8mb4 olabilir ve BAĞLANTI yine utf8 olabilir, ki bu da aynı şekilde başarısız olur. İnsanların kaçırdığı budur.
- 4
latin1 bir sütunda aksanlı ya da CJK metin
Hiç göç ettirilmemiş, daha eski bir şema.
Hangisinin seninki olduğu nasıl anlaşılır
SHOW VARIABLES LIKE 'character_set_%'; SHOW FULL COLUMNS FROM users;
Sütun utf8mb4 diyor ama bağlantı utf8 diyorsa, sorun bağlantı metnidir.
Nereye bakmalı
server.cfg içindeki bağlantı metni, ve tablonun karakter seti.
Nasıl düzeltilir
İkisini de ayarla. Önce bağlantıyı, çünkü unutulan yarı odur:
set mysql_connection_string "mysql://user:pass@host/db?charset=utf8mb4"
Sonra şemayı:
ALTER DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE users CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Hâlâ kendi kodunda mı takıldın?
Bu sayfa, bu hatanın genelde ne anlama geldiğini anlatır. Konsolunu Server Fixer'a yapıştır; içindeki her şeyi sıraya dizer ve önce ne yapman gerektiğini söyler. Kendin uğraşmak istemiyorsan ORBIE script'i onarır ve kaynağı sunucuna atmaya hazır geri verir.
bug_reportServer Fixer'ı açBu tür bir hata için Script Optimizer buna yol açan sorgu kalıplarını yakalar.