J'écris des quantités de texte importantes dans une colonne text
en utilisant le pilote sqlsrv PHP de Microsoft (sur un serveur Windows 2003).Données de chaîne, troncature à droite dans SQLSRV Pilote PHP ("donut hole")
Il y a une erreur de "trou de donut" étrange, où si la longueur du texte est assez petite, elle est enregistrée avec succès, et si le texte est suffisamment grand, il est également sauvegardé avec succès. Entre les deux, nous obtenons l'erreur suivante:
SQLSTATE: 22001
code: 0
message: [Microsoft][SQL Server Native Client 10.0]String data, right truncation
La limite inférieure (pour déclencher l'erreur) semble être autour de 4011 caractères, et la limite supérieure 8024. Il y a quelques autres colonnes de la base de données qui pourraient pousser sur la limite de la puissance de deux (4096 et 8192).
Cela se produit indépendamment de l'exécution du SQL. En cas de test, nous avons couru les éléments suivants:
$connectionInfo = array("UID" => "REDACTED", "PWD" => "REDACTED", "Database"=>"REDACTED", "CharacterSet" => "UTF-8");
$conn = sqlsrv_connect("SQLSERVER", $connectionInfo);
$stmt = sqlsrv_prepare($conn, "SELECT LEN(?)", array(&$large_string));
if (!sqlsrv_execute($stmt))
print_r(sqlsrv_errors());
sqlsrv_free_stmt($stmt);
sqlsrv_close($conn);
Nous avons trouvé une autre table (en utilisant varchar(max)
colonnes) qui présente le même comportement.
Édition: Cela se produit lors de l'utilisation du codage UTF-8 avec une colonne varchar, mais pas lors de l'utilisation du codage standard.
Avez-vous essayé d'exécuter SQL Server Profiler pour suivre les appels problématiques? –
J'ai le même problème avec le pilote mssql et il est résolu avec 'mssql.textlimit = 1052272' et' mssql.textsize = 1052272'. Je ne peux pas trouver un équivalent pour le pilote sqlsrv cependant. – danielson317