Bonjour,
un article qui va faire grincer des dents...
http://blog.developpez.com/sqlpro/p9...udre-aux-yeux/
Et il est de ma plume !
Bref, j'attends vos commentaires.
A +
Bonjour,
un article qui va faire grincer des dents...
http://blog.developpez.com/sqlpro/p9...udre-aux-yeux/
Et il est de ma plume !
Bref, j'attends vos commentaires.
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/ * * * * *
Certes MySQL a ses défauts mais pour ma part je ne m'en plains pas![]()
Questions subsidiaires :
1) quelle volume de base de données (en Go) manipulez vous ?
2) combien d'utilisateurs lancent en moyenne des requêtes simultanées ?
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/ * * * * *
Quelques corrections :
Les fichiers .frm sont propres au moteur MyISAM. Chacun des autres moteur a son propre système.- les informations sont générées à la demande depuis les fichiers .frm
InnoDB permet de ne verrouiller que les lignes, à travers le mécanisme transactionnel.- pré verrouillage des tables
Si, les UDF sont des fonctions écrites dans un langage externe et compilées.- aucune possibilité d'utiliser un langage externe
C'est une erreur. latin1_swedish_ci (la collation par défaut), latin1_german1_ci, utf8_general_ci, utf8_unicode_ci sont des collations insensibles aux accents.pas de collation insensible aux accents
C'est exact, mais ta formulation laisse penser qu'il n'y a pas du tout d'opérateur ensembliste, alors que l'UNION est bien là. Donc je dirais plutôt "absence des opérateurs ensemblistes INTERSECT et EXCEPT".- pas d'opérateur ensemblistes comme INTERSECT ou EXCEPT
Il faudrait préciser... si tu parles de WITH ROLLUP et WITH CUBE, ils sont bien présents dans MySQL.- pas de groupage OLAP
en fait, si.- pas de point de sauvegarde (SAVEPOINT)
[EDIT] cf http://dev.mysql.com/doc/refman/5.0/en/savepoint.html
Là je marche sur des oeufs parce que je ne connais quasiment rien au sujet... mais le DBA peut exiger le SSL, donc j'imagine des certificats ?- pas d'authentification possible par certificats
Syntaxe de GRANT dans MySQL :
Envoyé par doc MySQL
J'ai corrigé quelques éléments, mais à nouveau MySQL se fout du monde. Par exemple pour CUBE et ROLLUP c'est en pratique inexploitable car il manque la fonction GROUPINGS !
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/ * * * * *
Alors pour répondre à tes questions
1) Volume de mes base de données environ 1GoQuestions subsidiaires :
1) quelle volume de base de données (en Go) manipulez vous ?
2) combien d'utilisateurs lancent en moyenne des requêtes simultanées ?
2) Au maximum 5 utilisateurs lancent des requêtes en simultanées (et encore c'est rare qu'il y ait énormément du monde en même temps)
1 Go c'est de la très petite base !
5 utilisateurs et pas de requêtes simultané, c'est comme de manipuler des fichiers Cobol....
La différence commencera a se faire sentir quand vous aurez une base qui dépasse de loin la RAM (50 Go par exemple) et plus de 50 users....
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/ * * * * *
Je crains que tu n'aies omis de corriger les deux points suivants qui sont faux :
Envoyé par Antoun
Envoyé par Antoun
Sur les collations, vu la pauvreté de la chose, (un seule langue gérée le suédois) c'est inexploitable, donc fonctionnalité poudre aux yeux.
A quand des collations French, german, italian, Spanish.... ?
De la même façon pour les save point :
"Beginning with MySQL 5.0.17, a new savepoint level is created when a stored function is invoked or a trigger is activated. The savepoints on previous levels become unavailable and thus do not conflict with savepoints on the new level. When the function or trigger terminates, any savepoints it created are released and the previous savepoint level is restored. "
Autrement dit (et si j'ai bien compris), il n'est pas possible d'utiliser des SAVEPOINT à l'intérieur de procédures ou fonction, alors que le fait de piloter les transactions au sein du code serveur est le loin la fonction la plus intéressantes dans les SGBDR !
Donc encore une fonctionnalité poudre aux yeux !
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/ * * * * *
De mon point de vue, apres une dizaine d'années passées en prestation et en fixe dans des contextes complexes, à fort volume de données (>x To) et à fort volumétrie transactionnelle (plusieurs milliers d'utilisateurs simultanés) , je remarque que l'utilisation de MySQL reste très marginal.
J'ai vu du DB2, du Oracle, du SQLServer sur des applications de ce type mais pas encore de MySQL.
Alors les défenseurs de MySQL vont nous sortir des articles pourris comme quoi Google ou Facebook utilisent .. Ils utilisent oui mais pour des besoins très spécifiques (bcp de lectures, et peu d'écritures, pas de besoin de transaction, etc...).
Plus serieusement, sur des applications business ca reste assez marginal je pense.
donc les entreprises en général ne s'y trompent pas et ont bien remarqué la pauvreté du SGBD qui effectivement ressemble plus à ce qu'on faisait dans les années 80 avec les fichiers VSAM sous OS/390 qu'aux SGBD actuels.
Maintenant, il reste un choix judicieux pour des petites applications où bien souvent on déployait Oracle / SQL ou DB2 sous pretexte qu'on avait les licences mais pour lesquelles des SGBDR comme cela étaient inutiles et surdimensionnés.
MySQL a les collations latin1_spanish, latin1_german1 et latin1_german2 (ainsi que, pour être complet, latin1_danish). Ces collations (et notamment german1) contiennent les règles pour les lettres accentuées utilisées en français.
De manière générale, tu peux parfaitement dire que c'est de la poudre aux yeux, mais pas que ça n'existe pas.
En fait il n'est pas possible d'utiliser des SAVEPOINTs "when a stored function is invoked or a trigger is activated", donc dans un trigger ou une fonction. Mais c'est possible dans une procédure. En fait, dans un trigger ou une fonction, il n'est de tout façon pas possible de faire de COMMIT ou un ROLLBACK, l'interdiction des SAVEPOINTs va donc de soi.
Là encore, tu peux dire que c'est de la poudre aux yeux, mais pas que ça n'existe pas !
En fait il n 'y a pas de collation qui gère les accents ( 'fêtées' = fetees' par exemple) et il n'y a pas de collation spécifique au français. Par exemple en utilisant une collation qu'advient t-il du c cédille ? (j'ai pas fait le test....)
OK, je prend note. Peut tu poster en commentaire dans le blog ?
A +
Là encore, tu peux dire que c'est de la poudre aux yeux, mais pas que ça n'existe pas ![/QUOTE]
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/ * * * * *
Si, comme te le prouvera ce petit test :
Par exemple, les collations latin1_swedish_ci (la collation par défaut), latin1_german1_ci, utf8_general_ci, utf8_unicode_ci, etc., sont insensibles aux accents.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 Create table testcoll (txt varchar(30) charset latin1 collate latin1_german1_ci, descr varchar(30)) ; insert into testcoll (txt, descr) values ('fêtées', 'accents saisis') ; insert into testcoll (txt, descr) values (CONCAT('f', char(234 using latin1), 't', char(233 using latin1), 'es'), 'codes ASCII') ; insert into testcoll (txt, descr) values ('fetees', 'sans accent') ; select txt, descr from testcoll where txt = 'fetees' ;
Les collations insensibles aux accents sont également insensibles à la cédille, au tilde, etc. En fait, il faudrait dire "insensibles aux signes diacritiques".
OK, comme tu préfères !
Dans le principe, le test devrait être le suivant :
1 - jeu d'essai :
Les tests :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 CREATE TABLE testcoll (txt1 varchar(30) collate Collation_insensible_aux_diacritiques_sensible_a_la_casse, txt2 varchar(30) collate Collation_sensible_aux_diacritiques_insensible_a_la_casse); INSERT INTO testcoll (txt1, txt2) VALUES ('fêtées', 'fetees') ; INSERT INTO testcoll (txt1, txt2) VALUES ('fêtées', 'FETEES') ;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 -- test1 SELECT * FROM testcoll WHERE txt1 = 'Fetees' --> réponse1 : txt1 txt2 ------------------------------ ------------------------------
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 -- test2 SELECT * FROM testcoll WHERE txt1 = 'fetees' --> réponse2 : txt1 txt2 ------------------------------ ------------------------------ fêtées fetees fêtées FETEES
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 -- test3 SELECT * FROM testcoll WHERE txt1 = 'Fetees' COLLATE Collation_insensible_aux_diacritiques_insensible_a_la_casse, --> réponse3 : txt1 txt2 ------------------------------ ------------------------------ fêtées fetees fêtées FETEES
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 -- test4 SELECT * FROM testcoll WHERE txt1 = txt2 -- Reponse4 : Erreur : conflit de collation entre Collation_insensible_aux_diacritiques_sensible_a_la_casse, et 'Collation_sensible_aux_diacritiques_insensible_a_la_casse' dans l'opération =.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 -- test5 SELECT * FROM testcoll WHERE txt1 = txt2 COLLATE Collation_insensible_aux_diacritiques_sensible_a_la_casse -- réponse 5 txt1 txt2 ------------------------------ ------------------------------ fêtées fetees
A +
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 -- test6 SELECT * FROM testcoll WHERE txt1 = txt2 COLLATE Collation_insensible_aux_diacritiques_insensible_a_la_casse -- réponse 6 : txt1 txt2 ------------------------------ ------------------------------ fêtées fetees fêtées FETEES
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/ * * * * *
Autre test intéressant à faire pour voir comment il gère sont classement :
UPDATE testclass
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 CREATE TABLE testclass (txt_CI_AI varchar(30) collate French_CI_AI, txt_CS_AI varchar(30) collate French_CS_AI, txt_CI_AS varchar(30) collate French_CI_AS, txt_CS_AS varchar(30) collate French_CS_AS); -- remplacer les collations par celle de MySQL en : -- CI : Case Insensitive, -- CS : case Sensitive, -- AI : Accent Insensitive, -- AS : accent Sensitive, INSERT INTO testclass (txt_CI_AI) VALUES ('c'); INSERT INTO testclass (txt_CI_AI) VALUES ('C'); INSERT INTO testclass (txt_CI_AI) VALUES ('ç'); INSERT INTO testclass (txt_CI_AI) VALUES ('Ç'); INSERT INTO testclass (txt_CI_AI) VALUES ('a'); INSERT INTO testclass (txt_CI_AI) VALUES ('A'); INSERT INTO testclass (txt_CI_AI) VALUES ('à'); INSERT INTO testclass (txt_CI_AI) VALUES ('À'); INSERT INTO testclass (txt_CI_AI) VALUES ('s'); INSERT INTO testclass (txt_CI_AI) VALUES ('S'); INSERT INTO testclass (txt_CI_AI) VALUES ('t'); INSERT INTO testclass (txt_CI_AI) VALUES ('T'); INSERT INTO testclass (txt_CI_AI) VALUES ('ß'); INSERT INTO testclass (txt_CI_AI) VALUES ('b'); INSERT INTO testclass (txt_CI_AI) VALUES ('B'); INSERT INTO testclass (txt_CI_AI) VALUES ('d'); INSERT INTO testclass (txt_CI_AI) VALUES ('D');
SET txt_CS_AI = txt_CI_AI,
txt_CI_AS = txt_CI_AI,
txt_CS_AS = txt_CI_AI;[/CODE]
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 -- test1 : SELECT * FROM testclass ORDER BY txt_CI_AI -- résultat1 : txt_CI_AI txt_CS_AI txt_CI_AS txt_CS_AS ------------------------------ ------------------------------ ------------------------------ ------------------------------ a a a a A A A A à à à à À À À À b b b b B B B B c c c c C C C C ç ç ç ç Ç Ç Ç Ç d d d d D D D D s s s s S S S S ß ß ß ß t t t t T T T T
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 -- test2 : SELECT * FROM testclass ORDER BY txt_CS_AI -- résultat2 : txt_CI_AI txt_CS_AI txt_CI_AS txt_CS_AS ------------------------------ ------------------------------ ------------------------------ ------------------------------ a a a a A A A A à à à à À À À À b b b b B B B B c c c c C C C C ç ç ç ç Ç Ç Ç Ç d d d d D D D D s s s s S S S S ß ß ß ß t t t t T T T T
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 -- test3 : SELECT * FROM testclass ORDER BY txt_CI_AS -- résultat3 : txt_CI_AI txt_CS_AI txt_CI_AS txt_CS_AS ------------------------------ ------------------------------ ------------------------------ ------------------------------ a a a a A A A A à à à à À À À À b b b b B B B B c c c c C C C C ç ç ç ç Ç Ç Ç Ç d d d d D D D D s s s s S S S S ß ß ß ß t t t t T T T T
A +
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 -- test4 : SELECT * FROM testclass ORDER BY txt_CS_AS -- résultat4 : txt_CI_AI txt_CS_AI txt_CI_AS txt_CS_AS ------------------------------ ------------------------------ ------------------------------ ------------------------------ a a a a A A A A à à à à À À À À b b b b B B B B c c c c C C C C ç ç ç ç Ç Ç Ç Ç d d d d D D D D s s s s S S S S ß ß ß ß t t t t T T T T
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/ * * * * *
Toutes les collations sensibles à la casse (CS) de MySQL sont également sensibles aux diacritiques (AS). Donc ton premier cas, CS_AI n'existe pas.
Quant à ton second cas, CI_AS, il ne permet pas de répondre à la question d'origine, qui était l'existence de collation AI. Ceci dit, mon script suffit à prouver cette existence.
Je vais pousser les tests dès que j'ai un moment, mais il me semble encore une fois que le travail est à moitié fait : soit c'est CI+AI soit c'est CS+AS, mais pas possible d'avoir CI+AS ou CS+AI....
Et quid du classement ? Ou place t-il la cédille et le etset ?
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/ * * * * *
Intéressant comme critique, mais j'ai quelques arguments en faveur de mySQL (que j'utilise pour un intranet pro, avec une base MyISAM de 40 Go, quasi-exclusivement en lecture, 50 utilisateurs dont 5-10 concurrents) :
- c'est très très rapide en interrogation même sur des tables plus grandes que la RAM
- j'y ai trouvé la fonction GROUP_CONCAT qui manque cruellement en oracle et sql server
- surtout, c'est facile à installer, à configurer, et on trouve très facilement de l'aide pour des fonctionnalités d'utilisation/administration basiques.
Donc OK, c'est peut-être pas aussi complet ou rapide que d'autres SGBDR, mais pour certains usages, même pour des volumétries moyennes, c'est un outil adapté.
EDIT : le jour où mon boss, dont l'équipe n'utilisait qu'Access, m'a demandé de développer un serveur web + SGBD sans budget ni compétences, c'est MySQL qui m'a paru le plus simple, le mieux documenté et avec la meilleure communauté pour débuter. Et CA, c'est un argument de poids !
Le problème de MySQL n'est pas tant la rapidité de lecture, que celle transactionnelle. En lecture il est plutôt bon. En écriture en concurrence c'est catastrophique. A plus de 5 utilisateur il plonge dramatiquement ! Alors que Oracle ou SQL Server parviennent à plusieurs milliers d'utilisateurs simultanément, sans broncher....
Cette fonction est anti-relationnelle et je n'ai cessé de dénoncer son imbécilité ! En effet, les bases de données reposent sur la théorie des ensemble qui suppose une absence d'ordre totale dans les lignes des tables (la clause ORDER BY de SQL ne fait pas partie de l'algèbre relationnelle - c'est une clause cosmétique). Or cette pseudo fonction d'agrégation nécessite un ordre de lecture sinon elle sortira n'importe quoi....- j'y ai trouvé la fonction GROUP_CONCAT qui manque cruellement en oracle et sql server
C'est pour cela que cette horreur n'existe pas dans les SGBDR bien conçus, car ces derniers présentent des commandes SQL de la norme 1999 que MySQL n'implémente toujours pas et qui permettent justement de traiter correctement et de manière relationnelle ce problème, notamment les requêtes récursives : http://sqlpro.developpez.com/cours/s...te-recursives/
Pour un exemple de l'équivalent de GROUP_CONCAT, lisez l'exemple n°IV-D. Quatrième exemple : concaténer des mots pour former une phrase
Bref, MySQL c'est plus de 10 ans de retard dans le simple langage SQL !!!
Je memarre de la soit disante facilité comparée à SQL Server par exemple... Mais bon, peut être suis-je suggestif !- surtout, c'est facile à installer, à configurer, et on trouve très facilement de l'aide pour des fonctionnalités d'utilisation/administration basiques.
Oui, pour faire des petits sites web en lecture seule (ou presque) comme spip que j'utilise, c'est très bien !Donc OK, c'est peut-être pas aussi complet ou rapide que d'autres SGBDR, mais pour certains usages, même pour des volumétries moyennes, c'est un outil adapté.
Vous avez d'autres outils comme PostGreSQL qui est un vrai gratuit (mySQL étant payant, soit en code, soit en monaie).EDIT : le jour où mon boss, dont l'équipe n'utilisait qu'Access, m'a demandé de développer un serveur web + SGBD sans budget ni compétences, c'est MySQL qui m'a paru le plus simple, le mieux documenté et avec la meilleure communauté pour débuter. Et CA, c'est un argument de poids !
Et de nombreux SGBDR payant proposent des version gratuites de moins en moins limitées (exemple SQL Server 2008 R2 express : nombre de bases illimitées, taille maxi des bases 10 Go.).
Enfin, la qualité de la communauté MySQL est très faible. Le niveau est plus que débutant et le nombre de papiers qui vont de l'erreur à l'imbécilité en passant par le mensonge est légion. Chose que l'on trouve rarement dans les communautés Oracle ou SQL Server !
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/ * * * * *
Bonjour,
Concernant les collations je crois que vous avez tort :
latin1_general_ci est "CI_AS"
(mais effectivement, il n'y a rien de "CS_AI")
Partager