Scénario métier : La page php appelle la procédure stockée mysql, qui a 1 paramètre d'entrée et 1 paramètre de sortie.
Un problème est survenu : il peut être exécuté normalement, mais après avoir entré les paramètres dans la base de données, des caractères tronqués sont toujours affichés.
Le code de la page PHP est le suivant
<head> <meta charset="utf-8"> </head> <?php $conn = new MySQLi("数据库地址","数据库用户","密码","数据库名"); mysqli_query($conn,"SET NAMES utf8"); $info_name_cn='测试x201'; $info_name_cn=mb_convert_encoding($info_name_cn,'UTF-8'); $result=$conn->query("CALL x2('$info_name_cn',@exeout_rows)"); $result=$conn->query("SELECT @exeout_rows"); $recordset=mysqli_fetch_assoc($result); $exeout_rows=(int)$recordset["@exeout_rows"]; ?> <div>---|<?php echo $exeout_rows; ?>|<?php echo mb_detect_encoding($exeout_rows); ?>|---</div>
Le code de la procédure stockée mysql est le suivant
CREATE DEFINER=`数据库名`@`%` PROCEDURE `x2`( IN exein_info_name_cn VARCHAR(5) ,OUT exeout_rows int ) BEGIN set exeout_rows=1; insert into 测试表 ( info_name_cn ) values ( exein_info_name_cn ); END
Dans la base de données mysql, l'option de la table de test est "utf8/utf8_ganaral_ci", et le jeu de caractères et le tri l'ordre du champ interne info_name_cn de la table de test est "utf8/ utf8_ganaral_ci"
J'ai essayé différentes méthodes de conversion - le texte suivant
mais les résultats étaient tous tronqués - les résultats après exécution sont les suivants
(id est) 29 : Non converti
//$info_name_cn=mb_convert_encoding($info_name_cn,' UTF-8');
(id is)30 : Convertir en UTF-8
$info_name_cn=mb_convert_encoding($info_name_cn,'UTF-8');
(id is)31 : Convertir en GB2312
$info_name_cn= mb_convert_encoding($info_name_cn,'GBK');
(id is)32 : Convertir en GBK
$info_name_cn=mb_convert_encoding($info_name_cn,'GBK');
(id is)33 : Convertir en BIG5
$info_name_cn= mb_convert_encoding($info_name_cn,'ASCII');
(id is)34 : Convertir en ASCII
$info_name_cn=mb_convert_encoding($info_name_cn,'ASCII');
De plus, l'exécution du code suivant peut fonctionner normalement. Ajouter le chinois à la base de données
<?php $link = @mysql_connect("数据库地址","数据库用户名","数据库密码") or die("连接失败" .mysql_error()); @mysql_select_db("数据表") or die("连接失败".mysql_error); function insert(){ mysql_query("set names utf8"); $sqlinsert = "insert into 测试表(info_name_cn) values('李四')"; $resultinsert = mysql_query($sqlinsert); if($resultinsert){ echo "insert data success"; }else{ echo "insert data fail".mysql_error(); } } insert(); mysql_close($link); ?>
*Problème d'encodage du fichier .php
Supplément : dans la même situation, j'ai modifié la méthode de codage d'enregistrement des fichiers en ASCI et le code de la page s'est exécuté normalement après l'avoir défini sur GBK.