IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

Langue japonaise et base de données


Sujet :

Langage SQL

  1. #1
    Membre éclairé Avatar de bstevy
    Homme Profil pro
    Solutions Architect
    Inscrit en
    Mai 2009
    Messages
    552
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Japon

    Informations professionnelles :
    Activité : Solutions Architect
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2009
    Messages : 552
    Points : 870
    Points
    870
    Par défaut Langue japonaise et base de données
    Bonjour,


    j'ai une analyse d'impact à réaliser sur une modification de fichier en terme de katakana single byte et double byte.
    Pour ceux qui connaissent pas, il s'agit du même caractère mais écris différemment, l'un prenant deux bytes alors que l'autre n'en prend qu'un.
    Par exemple : タ et タ
    Ces deux caractères sont les mêmes, mais n'ont pas le même code hexa derrière a priori.

    Ma question porte sur la façon dont une base de données va stocker cela.
    Quand on précise varchar(15), il s'agit de n'importe quel caractère ? Je pourrais donc avoir 15 double bytes et 15 single bytes dans mes champs ? Ou est-ce que cela peut avoir une influence sur la longueur de mon champ ?

    Pour info, je connais déjà la réponse sur Oracle, j'ai pu tester le fait qu'un double byte prenait bien deux caractères. Autrement dit, un varchar(15) ne peut contenir que 7 double bytes... mais est-ce que c'est pareil pour les autres bases ? Vous auriez une idée ?


    Merci d'avance pour votre réponse.

    Steven

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 043
    Points : 40 957
    Points
    40 957
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    C'est une question d'encodage de la base de données et du champ à proprement parler.

    Je ne maitrise bien que la Base de données Firebird et pas le japonais mais peu importe, cela donnera des pistes de travail

    pour une Firebird encodée en UTF8
    un varchar(15) peut contenir jusqu'à 15 caractères "affichables" mais la taille physique pourrait varié de 15 à 15*4 octets
    si le champ est déclaré (CHARSET) WIN932 alors varchar(15) fera toujours au maxi 15 caractères katakana mais serait en fait de taille physique d'un maximum de 30 octets soit de 2 à 15*2
    pour le Kanji? le champ serait déclaré (CHARSET) CP943C (tri possible via CP943C_UNICODE) ce que j'en ai lu indique que chaque caractère est sur 3 octets
    => une taille physique de 3 à 15*3 octets
    il y a aussi l'encodage de la base en SJIS_0208 mais je serais incapable de dire à quoi il correspond si ce n'est à du japonais .....

    cependant je suis presque sûr que cela dépend beaucoup du SGBD et donc les charsets indiqués ici ne sont valable que pour Firebird et peut être Interbase.
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  3. #3
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Citation Envoyé par bstevy Voir le message
    Pour info, je connais déjà la réponse sur Oracle, j'ai pu tester le fait qu'un double byte prennait bien deux caractères. Autrement dit, un varchar(15) ne peut contenir que 7 double bytes...
    Specifying Column Lengths as Bytes or Characters
    name VARCHAR2(32 CHAR)

    The name column contains data in the database character set. If the database character set allows multibyte characters, then the 32 characters can be stored as more than 32 bytes.

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 770
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 770
    Points : 52 726
    Points
    52 726
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par bstevy Voir le message
    Bonjour,


    j'ai une analyse d'impact à réaliser sur une modification de fichier en terme de katakana single byte et double byte.
    Pour ceux qui connaissent pas, il s'agit du même caractère mais écris différemment, l'un prenant deux bytes alors que l'autre n'en prend qu'un.
    Par exemple : タ et タ
    Ces deux caractères sont les mêmes, mais n'ont pas le même code hexa derrière a priori.

    Ma question porte sur la façon dont une base de données va stocker cela.
    Quand on précise varchar(15), il s'agit de n'importe quel caractère ? Je pourrais donc avoir 15 double bytes et 15 single bytes dans mes champs ? Ou est-ce que cela peut avoir une influence sur la longueur de mon champ ?

    Pour info, je connais déjà la réponse sur Oracle, j'ai pu tester le fait qu'un double byte prenait bien deux caractères. Autrement dit, un varchar(15) ne peut contenir que 7 double bytes... mais est-ce que c'est pareil pour les autres bases ? Vous auriez une idée ?


    Merci d'avance pour votre réponse.

    Steven
    Question à la fois vaste et simple... D'abord ce que vous a dit SergioMaster est faux, ou tout au moins spécifique à Firebird...

    La structuration des données dans les bases de données ne repose pas sur un jeu de caractères particulier, mais plus généralement sur la notion de collation.
    Les types de données littéraux du SQL sont :
    • le CHAR/VARCHAR dont l'encodage est "basé" sur l'ASCII (1 caractère = 1 octet) et considère les caractères comme latin (A, Z...), conventionnellement appelé INTERNATIONAL
    • le NCHAR/NVARCHAR dont l'encodage est "basé" sur l'UNICODE (1 caractère = 2 octet) et considère la plupart des langues (latines, cyrillique, grecque, hébreu, arabe, japonais...), conventionnellement appelé NATIONAL puisque chacun y trouvera son "alphabet" national (le chinois y trouvera le mandarin par exemple).


    Pour résoudre les problématiques spécifiques aux langues la norme SQL a apporter la notion de collation qui rend indépendante le "réglage" des effets littéraux des différentes langues par rapport à un encodage quel qu'il soit.

    La collation permet donc :
    • de tenir compte ou non de la CASSE (CI => Case Insensitive, CS => Case Sensitive) - exemple : 'A' = 'a'
    • de tenir compte ou non des caractères diacritiques (accents, cédille, ligature...) (AI => Accent Insensitive, AS => Accent Sensitive) - exemple 'A' = 'À'
    • de tenir compte de la "largeur" du caractère (WS => Wide Sensitive) - exemple '2' = '²'
    • de tenir compte des kana type (KS => Kanatype Sensitive entre Katakana et Hiragana) exemple (voir image)

    Condition du test des kana types :
    Nom : kanabase.png
Affichages : 629
Taille : 19,5 Ko
    Résultats des 5 requêtes
    Nom : kanaresults.png
Affichages : 606
Taille : 6,9 Ko

    Hélas Oracle n'utilise pas la collation et considère un truc imbitable... le NLS !

    Tous les autres SGBDR supportent les collations.
    • MySQL c'est nullissime, farci d'erreurs et d’approximations
    • PostGreSQL c'est embryonnaire
    • IBM DB2 c'est déjà du costaud
    • Sybase ASE c'est pas mal
    • MS SQL Server c'est royal (plus de 4 000 collations différentes)


    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  5. #5
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 043
    Points : 40 957
    Points
    40 957
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par SQLpro Voir le message
    D'abord ce que vous a dit SergioMaster est faux, ou tout au moins spécifique à Firebird...
    j'avais bien fait remarquer, il me semble, qu'il s'agissait de Firebird
    Citation Envoyé par SergioMaster
    Je ne maitrise bien que la Base de données Firebird et pas le japonais mais peu importe, cela donnera des pistes de travail
    Ensuite pour moi, toujours dans mon trip Firebird, une base peut avoir un encodage par défaut, un champ avec un CHARSET (type d'encodage) différent de la base et/ou une COLLATION (mode de tri prenant en compte la casse et cie.)
    Citation Envoyé par SergioMaster
    Cependant je suis presque sûr que cela dépend beaucoup du SGBD et donc les charsets indiqués ici ne sont valable que pour Firebird et peut être Interbase.
    Bien que Firebird (et Interbase) ne semblent pas très souvent citées par SQLPro (boutade) elles existent, mais du coup je suis "content" d'apprendre que Oracle n'est pas toujours le nec+ultra, que MySQL reste une daube à ses yeux et que SQL Server offre tant de collations
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2010] Gerer langues dans la base de données
    Par obel38 dans le forum Access
    Réponses: 2
    Dernier message: 16/03/2015, 19h17
  2. Réponses: 4
    Dernier message: 19/11/2009, 10h28
  3. Base de données en 2 langues
    Par misig dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 09/01/2008, 08h03
  4. Langue base de données différente que celle du serveur
    Par bossun dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 09/11/2007, 10h59
  5. Gestion de base de données en langue Arabe ?
    Par jamdinhe dans le forum Autres
    Réponses: 2
    Dernier message: 05/06/2007, 23h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo