Support de Unicode

De Wiki1000
(Différences entre les versions)
(Unicode dans Delphi)
 
(20 révisions intermédiaires par 2 utilisateurs sont masquées)
Ligne 1 : Ligne 1 :
{{new|tahoe}}
+
{{new|650}}
==Unicode dans Delphi==
+
  
A partir de la version 2009, Delphi supporte l'unicode.
+
===Support de Unicode en fonction des moteurs de bases de données===
La représentation interne des chaines change.
+
  
{| class="wikitable" width="80%" align="center"
+
Suivant le type de moteur deux modes de gestion de Unicode sont implémentées :
|-
+
! scope=col |
+
! scope=col | < 2009
+
! scope=col | >= 2009
+
|-
+
| width="33%" |
+
'''String'''
+
| width="34%" |
+
AnsiString
+
| width="33%" |
+
UnicodeString
+
|-
+
| width="33%" |
+
Char
+
| width="34%" |
+
AnsiChar
+
| width="33%" |
+
WideChar
+
|-
+
|}
+
  
Avant 2009 : string=AnsiString ; char=ansichar.
+
* Gestion par stockage en UTF8
 +
:Dans ce mode, les données caractères sont stockées sous forme UTF8 par le moteur de base de données. Les types de données utilisés restent varchar et text.  
  
Après 2009 : string=UnicodeString ; char=widechar.
+
:Les caractéristique de ce mode :
 +
:* Taille de stockage variable de chaque caractère (jusqu'à 4)
 +
:* Modification de la taille de déclaration des colonnes caractères pour compenser le stockage variable (x 2)
 +
:* Peu d'impacts sur la taille des bases de données lorsque la langue principale est occidentale
  
'''Tout code qui présume qu'une variable de type char est stockée sur un byte est donc à revoir.'''
+
*Gestion par stockage Unicode
 +
: Dans ce mode les données caractères sont stockées sous forme Unicode. Les types de données utilisés pour les colonnes caractères sont nvarchar et ntext
  
Une unité a été ajoutée pour la lecture et écriture de flux contenant des chaînes: ustrhlp.
+
:Les caractéristique de ce mode :
 +
:* Taille de stockage fixe de 2 caractères
 +
:* La taille de la base de données peut être significativement impactée.
  
Dans cette unité, la lecture et l'écriture chaine dans un flux s'effectue par défaut en '''ansi''' (comme avant donc). Il faut préciser si on souhaite un autre encodage.
+
{|class="wikitable"
 
+
|-
{{tip|Le type UnicodeString n'est pas équivalent au type WideString. UnicodeString est géré par compteur de référence et utilise le gestionnaire de mémoire delphi, pas le type wideString qui est moins efficace}}
+
!Moteur
 
+
!Mode
==Migration vers Delphi 2010==
+
!Remarque
 
+
|-
===Versions du compilateur===
+
|SQL Server
 
+
|Unicode
{$IFDEF VER180} - Delphi 2006
+
|(1)
 
+
|-
{$IFDEF VER180} - Delphi 2007
+
|Oracle
 
+
|UTF8
{$IFDEF VER185} - Delphi 2007
+
|(2)
 
+
|}
{$IFDEF VER200} - Delphi 2009
+
  
{$IFDEF VER210} - Delphi 2010
+
(1) SQL Server 2008 R2 supporte la compression des données Unicode lorsque la compression est activée.
  
===La configuration du projet===
+
(2) La prise en compte de Unicode sur Oracle n'est possible que si le jeu de caractères de la base de données est AL32UTF8
* Indy (tiburon)
+
* Zlib
+
* libGraph/png*
+
* Apache
+
  
* [http://docwiki.embarcadero.com/RADStudio/fr/STRINGCHECKS_%28Delphi%29 Désactiver la vérification du format de chaîne]
+
{{warning|Sur une instance AL32UTF8 n'utilisez pas l'utilisateur sys pour synchroniser les bases de données. En effet cet utilisateur ignore le paramétrage NLS_LENGTH_SEMANTICS et les colonnes VARCHAR2 créées ou modifiées par cet utilisateur seront toujours définies en BYTE. Du fait que la longueur d'un caractère UTF8 varie de 1 à 4 bytes vous pouvez être confronté à des erreurs d'insertion de type "ORA-12899: valeur trop grande pour la colonne "}}
  
 +
Voir aussi:
 +
* [[Attribut_unicode_(model)|Attribut unicode]]
 +
* [https://docs.oracle.com/cd/E24693_01/server.11203/e24448/initparams149.htm Oracle NLS_LENGTH_SEMANTICS]
  
===Reste à faire===
+
[[Category:Base de données]]
* CharInSet + Warning en général
+
[[Category:Version650]]
 +
[[Category:Oracle]]

Version actuelle en date du 16 septembre 2022 à 10:06

version650-48x48.png

Support de Unicode en fonction des moteurs de bases de données

Suivant le type de moteur deux modes de gestion de Unicode sont implémentées :

  • Gestion par stockage en UTF8
Dans ce mode, les données caractères sont stockées sous forme UTF8 par le moteur de base de données. Les types de données utilisés restent varchar et text.
Les caractéristique de ce mode :
  • Taille de stockage variable de chaque caractère (jusqu'à 4)
  • Modification de la taille de déclaration des colonnes caractères pour compenser le stockage variable (x 2)
  • Peu d'impacts sur la taille des bases de données lorsque la langue principale est occidentale
  • Gestion par stockage Unicode
Dans ce mode les données caractères sont stockées sous forme Unicode. Les types de données utilisés pour les colonnes caractères sont nvarchar et ntext
Les caractéristique de ce mode :
  • Taille de stockage fixe de 2 caractères
  • La taille de la base de données peut être significativement impactée.
Moteur Mode Remarque
SQL Server Unicode (1)
Oracle UTF8 (2)

(1) SQL Server 2008 R2 supporte la compression des données Unicode lorsque la compression est activée.

(2) La prise en compte de Unicode sur Oracle n'est possible que si le jeu de caractères de la base de données est AL32UTF8

Exclam-20px.png Attention : Sur une instance AL32UTF8 n'utilisez pas l'utilisateur sys pour synchroniser les bases de données. En effet cet utilisateur ignore le paramétrage NLS_LENGTH_SEMANTICS et les colonnes VARCHAR2 créées ou modifiées par cet utilisateur seront toujours définies en BYTE. Du fait que la longueur d'un caractère UTF8 varie de 1 à 4 bytes vous pouvez être confronté à des erreurs d'insertion de type "ORA-12899: valeur trop grande pour la colonne "

Voir aussi:

Outils personnels