Ne peut pas stocker des caractères UTF8 dans MySQL

Ne peut pas trouver la raison pour laquelle je suis incapable de les stocker dans une base de données MySQL personnages comme ŝ, î, º.

Ma table de définition est:

CREATE TABLE IF NOT EXISTS `gen_admin_words_translated` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `word_id` int(10) NOT NULL,
  `value` text COLLATE utf8_unicode_ci,
  `lang_id` int(2) NOT NULL,
  `needUpd` int(1) NOT NULL DEFAULT '1',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=2689 ;

La connexion à la base de données se fait avec le script suivant:

$charset = "UTF8";
$link = mysql_connect($host, $user, $pass);
if(!$link){
    die("Unable to connect to database server.");
}
mysql_selectdb($database);
if(function_exists("mysql_set_charset")){
    mysql_set_charset($charset, $link);
}else{
    mysql_query("SET NAMES $charset");   
}

Que j'ai sur la tête une partie de la page:

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

et le script est:

$text = 'ţ, î, ş';
mysql_query("insert into gen_admin_words_translated (word_id, lang_id, value, needUpd) values (1, 1, '$text', 1)");

Tout ce que j'obtiens à la fin du tableau est:

SELECT * FROM  `gen_admin_words_translated` 

id   word_id value lang_id needUpd
5166 1034    ?,    1       1
Puisque vous essayez d'insérer des chaînes de caractères... est votre script d'encodage de texte (tel qu'enregistré sur le disque) est également UTF-8?
Comment puis-je vérifier? Je suis en cours d'exécution du script sur un serveur, et non localement.
Dépend de votre éditeur, mais vous pouvez également faire un rapide et sale vérifier: ajouter le caractère à votre fichier quelque part et de les enregistrer. Si les changements de taille de fichier par 1 ou 2 octets au lieu de 3, vous n'êtes pas en UTF-8.

OriginalL'auteur CristiC | 2011-09-16