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
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
Vous devez vous connecter pour publier un commentaire.
L'élargissement de mes commentaires en réponse:
Il semble que vous avez mis en place les choses correctement, et ne sont coincés sur l'insertion d'une chaîne de caractères littérale de la base de données. Pour le faire avec succès, vous devez également de s'assurer que votre encodage de texte pour l'enregistrement du script PHP est également UTF-8.
Plus décent éditeurs vous permettra de savoir quel encodage que vous utilisez actuellement et peut également enregistrer sous (c'est à dire de convertir entre les différents codages (même le bloc-notes est-ce à aujourd'hui). Cependant, comme une vérification rapide vous pouvez ajouter le caractère
€
à votre fichier quelque part et l'enregistrer. Si les changements de taille de fichier par 1 ou 2 octets au lieu de 3, vous n'êtes pas en UTF-8 et que vous avez besoin de convertir le fichier pour que l'encodage.Autres que que, lors de la réception du texte comme entrée à partir du navigateur de votre code doit traiter l'amende juste.
Remarque: Tout en utilisant un
<meta>
balise pour définir l'encodage de votre page doit être suffisant, il est préférable si vous faites cela avec un en-tête HTTP de PHP comme ceci:OriginalL'auteur Jon
que j'ai couru votre script, ça a fonctionné pour moi:
résultat:
choses à vérifier:
vérifier si votre page web est vraiment UTF-8, vous avez peut-être certains chaset définir un autre endroit.
encodage de fichier doit être aussi l'UTF-8 comme il peut casser vos personnages si c'est le contraire ..
l'encodage avec sa page web a à voir avec l'insert, les personnages n'ont pas encore de base de données si la page n'est pas de l'utf-8. Essayez d'ouvrir un bloc-notes, tapez les caractères et le fermer à l'ANSI et vous verrez que ça casse des caractères.
Désolé, mon erreur pour ne pas être exacte. Je veux dire que ce qu'il tente maintenant (qui ne fonctionne pas) n'a rien à voir avec sa page web. Aussi, il a une
meta
balise qui, tout n'est pas idéal, devrait suffire pour le navigateur.Grâce Mihai. C'était un problème avec mon éditeur que ce n'était pas de l'encodage en UTF8.
OriginalL'auteur Mihai Iorga
Le dernier résultat que vous avez collé viennent de MySQL en Ligne de Commande? Si, essayez de
SET NAMES utf8;
avant de requêteSELECT * FROM gen_admin_words_translated
Oui, il l'a fait, mais seulement dans le code PHP, non? Ce que je ne suis pas sûr, c'est qu'il a l'aide de Ligne de Commande MySQL ou d'autres outils pour exécuter la requête SELECT.
OriginalL'auteur l99933
Si c':
est votre littérale de code, vous devez assurez-vous que le source PHP fichier est encodé en UTF-8 ainsi. Sinon, ces personnages vont être ISO-8859-1 caractères Unicode contexte, résultant dans la rupture de caractères.
OriginalL'auteur Pekka 웃
Vérifier votre MySQL fichier d'initialisation. Il devrait inclure ces jeux de caractères, de lignes:
utf8mb4
, pasutf8
, depuisutf8
dans MySQL est limité à 3 octets, et ne peut pas représenter tous les caractères Unicode.OriginalL'auteur Costis Aivalis
Dans cette déclaration, vous insérez des caractères tels qu'ils existent dans l'actuel fichier PHP:
Cependant, ils seront encodés à l'aide de l'encodage de votre fichier PHP. À moins que ce fichier PHP utilise l'encodage UTF-8 lui-même, la chaîne résultante ne sera pas codé en UTF-8.
Vous devez utiliser votre éditeur de texte pour vérifier l'encodage de caractères utilisé sur le fichier en cours. Tous les honnêtes éditeurs de texte devrait être en mesure à l'écran, et certains peuvent être en mesure de convertir l'encodage de caractères utilisé dans un document.
De créer plus d'un code portable, assurer l'encodage des caractères de votre document n'a pas d'importance, vous pouvez utiliser codé valeurs comme ceci:
Malheureusement, si vous avez à faire beaucoup de ce qu'il va être une douleur, parce que vous avez à utiliser le multi-octet hex représentation de PHP n'est pas un natif de l'Unicode manière de spécifier des caractères à l'instar de certains autres langues (où vous pouvez aller "\u163" au lieu de "\xC5\xA3").
Vous pouvez consulter l'UTF-8 est une représentation en hexadécimal en utilisant de tels outils.
OriginalL'auteur thomasrutter