Mostra notizie nelle discussioni
  • Avatar
    Scritto da
    Non Autenticato
    il 2014-10-01 18:31:59.0 alle 2014-10-01 18:31:59.0
    SQL : create database : collation
    Cosa è meglio scegliere? utf8, 16 o 32?
    • Avatar
      Scritto da
      Non Autenticato
      il 2014-10-01 18:58:16.0 alle 2014-10-01 18:58:16.0
      Re: SQL : create database : collation
      Cosa è meglio scegliere? utf8, 16 o 32?

      Ad esempio:

      utf8_general_ci sorts by stripping away all accents and sorting as if it were ASCII
      utf8_unicode_ci uses the Unicode sort order, so it sorts correctly in more languages

      Nel primo caso mi aspetterei che saltino fuori bachi per cui un utente The Lìch equivalga a The Lich.
      Nel secondo caso mi aspetterei possibili problemi in ricerche troppo pistine che vogliono parole esattamente digitate, mentre sarebbe meglio se si facesse di ogni erba un fascio di a, à, ä...
      • Avatar
        ☺
        Scritto da
        ::1
        il 2014-10-01 19:03:00.0 alle 2014-10-01 19:03:00.0
        Trollate totali: 12321
        Re: SQL : create database : collation
        Scritto da:
        > Cosa è meglio scegliere? utf8, 16 o 32?
        >
        > Ad esempio:
        >
        > utf8_general_ci sorts by stripping away all accents and sorting as if it were ASCII
        > utf8_unicode_ci uses the Unicode sort order, so it sorts correctly in more languages
        >
        > Nel primo caso mi aspetterei che saltino fuori bachi per cui un utente The Lìch equivalga a The Lich.

        Ha detto che li considera equivalenti solo nel sort

        > Nel secondo caso mi aspetterei possibili problemi in ricerche troppo pistine che vogliono parole esattamente digitate, mentre sarebbe meglio se si facesse di ogni erba un fascio di a, à, ä...

        Di che DBMS parli?
        Young professional woman and busy mom.
        • Avatar
          Scritto da
          Non Autenticato
          il 2014-10-01 19:06:37.0 alle 2014-10-01 19:06:37.0
          Re: SQL : create database : collation
          Scritto da: ::1
          > Scritto da:
          > > Cosa è meglio scegliere? utf8, 16 o 32?
          > >
          > > Ad esempio:
          > >
          > > utf8_general_ci sorts by stripping away all accents and sorting as if it were ASCII
          > > utf8_unicode_ci uses the Unicode sort order, so it sorts correctly in more languages
          > >
          > > Nel primo caso mi aspetterei che saltino fuori bachi per cui un utente The Lìch equivalga a The Lich.
          >
          > Ha detto che li considera equivalenti solo nel sort

          Ci stavo giusto pensando. Del resto chi ha programmato il malloppo avrà tenuto conto di questi problemi, no?

          Al momento propenderei per utf8_unicode_ci.

          > > Nel secondo caso mi aspetterei possibili problemi in ricerche troppo pistine che vogliono parole esattamente digitate, mentre sarebbe meglio se si facesse di ogni erba un fascio di a, à, ä...
          >
          > Di che DBMS parli?

          MySQL.

          Ho comprato uno script eBay Clone con la maggior parte delle caratteristiche che mi servono, e GPL2. Sto provando a installarlo nella macchina virtuale di Turnkey LAMP.
          • Avatar
            Scritto da
            Non Autenticato
            il 2014-10-01 19:24:43.0 alle 2014-10-01 19:24:43.0
            Re: SQL : create database : collation
            Scritto da:
            > Scritto da: ::1
            > > Scritto da:
            > > > Cosa è meglio scegliere? utf8, 16 o 32?
            > > >
            > > > Ad esempio:
            > > >
            > > > utf8_general_ci sorts by stripping away all accents and sorting as if it were ASCII
            > > > utf8_unicode_ci uses the Unicode sort order, so it sorts correctly in more languages
            > > >
            > > > Nel primo caso mi aspetterei che saltino fuori bachi per cui un utente The Lìch equivalga a The Lich.
            > >
            > > Ha detto che li considera equivalenti solo nel sort
            >
            > Ci stavo giusto pensando. Del resto chi ha programmato il malloppo avrà tenuto conto di questi problemi, no?
            >
            > Al momento propenderei per utf8_unicode_ci.

            Ma ad esempio ha anche ragione questo:

            I always use utf8_bin because of the problem highlighted by Guus. In my opinion, as far as the database should be concerned, a string is still just a string. A string is a number of UTF-8 characters. A character has a binary representation so why does it need to know the language you're using? Usually, people will be constructing databases for systems with the scope for multilingual sites. This is the whole point of using UTF-8 as a character set. I'm a bit of a pureist but I think the bug risks heavily outweigh the slight advantage you may get on indexing. Any language related rules should be done at a much higher level than the DBMS.

            E poi perché utf8 e non 16 o 32?
            Non ho presente a quali alfabeti si estendano il 16 e il 32, l'8 dovrebbe bastare per tutto ciò che si può scrivere in alfabeto latino.

            Ma non vorrei nemmeno introdurre rallentamenti nel nome di improbabili estensioni a utenti cinesi, giapponesi eccetera (che non visiteranno mai il mio sito).

            > > > Nel secondo caso mi aspetterei possibili problemi in ricerche troppo pistine che vogliono parole esattamente digitate, mentre sarebbe meglio se si facesse di ogni erba un fascio di a, à, ä...
            > >
            > > Di che DBMS parli?
            >
            > MySQL.
            >
            > Ho comprato uno script eBay Clone con la maggior parte delle caratteristiche che mi servono, e GPL2. Sto provando a installarlo nella macchina virtuale di Turnkey LAMP.
            • Avatar
              Scritto da
              Non Autenticato
              il 2014-10-01 19:33:53.0 alle 2014-10-01 19:33:53.0
              Re: SQL : create database : collation
              Scritto da:
              > Scritto da:
              > > Scritto da: ::1
              > > > Scritto da:
              > > > > Cosa è meglio scegliere? utf8, 16 o 32?
              > > > >
              > > > > Ad esempio:
              > > > >
              > > > > utf8_general_ci sorts by stripping away all accents and sorting as if it were ASCII
              > > > > utf8_unicode_ci uses the Unicode sort order, so it sorts correctly in more languages
              > > > >
              > > > > Nel primo caso mi aspetterei che saltino fuori bachi per cui un utente The Lìch equivalga a The Lich.
              > > >
              > > > Ha detto che li considera equivalenti solo nel sort
              > >
              > > Ci stavo giusto pensando. Del resto chi ha programmato il malloppo avrà tenuto conto di questi problemi, no?
              > >
              > > Al momento propenderei per utf8_unicode_ci.
              >
              > Ma ad esempio ha anche ragione questo:
              >
              > I always use utf8_bin because of the problem highlighted by Guus. In my opinion, as far as the database should be concerned, a string is still just a string. A string is a number of UTF-8 characters. A character has a binary representation so why does it need to know the language you're using? Usually, people will be constructing databases for systems with the scope for multilingual sites. This is the whole point of using UTF-8 as a character set. I'm a bit of a pureist but I think the bug risks heavily outweigh the slight advantage you may get on indexing. Any language related rules should be done at a much higher level than the DBMS.
              >
              > E poi perché utf8 e non 16 o 32?
              > Non ho presente a quali alfabeti si estendano il 16 e il 32, l'8 dovrebbe bastare per tutto ciò che si può scrivere in alfabeto latino.
              >
              > Ma non vorrei nemmeno introdurre rallentamenti nel nome di improbabili estensioni a utenti cinesi, giapponesi eccetera (che non visiteranno mai il mio sito).

              Ma anche

              Because utf8_general_ci is the default collation for Unicode in MySQL, if you want to use utf8_unicode_ci then you end up having to specify it in a lot of places.

              Appena aperto phpmyadmin e già incerto su cosa prendere per colazione. A bocca storta
              • Avatar
                ☺
                Scritto da
                ::1
                il 2014-10-01 21:11:04.0 alle 2014-10-01 21:11:04.0
                Trollate totali: 12321
                Re: SQL : create database : collation
                Scritto da:
                >
                > Ma anche
                >
                > Because utf8_general_ci is the default collation for Unicode in MySQL, if you want to use utf8_unicode_ci then you end up having to specify it in a lot of places.
                >
                > Appena aperto phpmyadmin e già incerto su cosa prendere per colazione. A bocca storta
                >

                Se non hai mysql 5.5+ preoccupati di questo ; sul fdt abbiamo dovuto fare un workaround ad hoc per postare questo carattere 💩

                **Modificato dall'autore il 01.10.2014 21:11**
                Young professional woman and busy mom.
                • Avatar
                  Scritto da
                  Non Autenticato
                  il 2014-10-01 21:39:53.0 alle 2014-10-01 21:39:53.0
                  Re: SQL : create database : collation
                  Scritto da: ::1
                  > Scritto da:
                  > >
                  > > Ma anche
                  > >
                  > > Because utf8_general_ci is the default collation for Unicode in MySQL, if you want to use utf8_unicode_ci then you end up having to specify it in a lot of places.
                  > >
                  > > Appena aperto phpmyadmin e già incerto su cosa prendere per colazione. A bocca storta
                  > >
                  >
                  > Se non hai mysql 5.5+ preoccupati di questo ;

                  mysql Ver 14.14 Distrib 5.5.37, for debian-linux-gnu (x86_64) using readline 6.2

                  > sul fdt abbiamo dovuto fare un workaround ad hoc per postare questo carattere 💩

                  Non bastava Evacua ?
                  • Avatar
                    Scritto da
                    Non Autenticato
                    il 2014-10-01 21:44:56.0 alle 2014-10-01 21:44:56.0
                    Re: SQL : create database : collation
                    Scritto da:
                    > Scritto da: ::1
                    > > Scritto da:
                    > > >
                    > > > Ma anche
                    > > >
                    > > > Because utf8_general_ci is the default collation for Unicode in MySQL, if you want to use utf8_unicode_ci then you end up having to specify it in a lot of places.
                    > > >
                    > > > Appena aperto phpmyadmin e già incerto su cosa prendere per colazione. A bocca storta
                    > > >
                    > >
                    > > Se non hai mysql 5.5+ preoccupati di questo ;
                    >
                    > mysql Ver 14.14 Distrib 5.5.37, for debian-linux-gnu (x86_64) using readline 6.2
                    >
                    > > sul fdt abbiamo dovuto fare un workaround ad hoc per postare questo carattere 💩
                    >
                    > Non bastava Evacua ?

                    Quindi dovrei usare utf8mb4?
                    Ormai ho scelto utf8_general_ci In lacrime
                    Mi ha convinto questo post:

                    Because utf8_general_ci is the default collation for Unicode in MySQL, if you want to use utf8_unicode_ci then you end up having to specify it in a lot of places.

                    Va bè che si tratta solo di un test, che ha lo scopo:
                    - di imparare a installare il robo;
                    - di vedere a quante e quali grane vado incontro.
            • Avatar
              ☺
              Scritto da
              ::1
              il 2014-10-01 21:08:15.0 alle 2014-10-01 21:08:15.0
              Trollate totali: 12321
              Re: SQL : create database : collation
              Scritto da:
              > E poi perché utf8 e non 16 o 32?
              > Non ho presente a quali alfabeti si estendano il 16 e il 32, l'8 dovrebbe bastare per tutto ciò che si può scrivere in alfabeto latino.

              Anche l'alfabeto latino supera gli otto bit in utf8.
              Infatti essendo un encoding a larghezza del carattere variabile viene usato un byte per l'ascii, e più byte per tutto il resto.
              Es: in utf8 il carattere 'a ' è la sequenza di bit 01100001; il carattere 'à ' è la sequenza di bit 11000011:10100000.
              Utf8 quindi può rappresentare tutti i caratteri (oltre un milione ad oggi) utilizzando un numero variabile di bytes, da 1 a 6 per ogni carattere; di conseguenza per sapere la lunghezza di una stringa encodata in utf8 non è sufficiente sapere quanti bytes la compone ma necessita analizzare tutti i bytes per sapere cosa rappresentano.
              Ucs2 nasce con l'idea di avere tutti i caratteri in due bytes, rappresentando un massimo di 65536; per poter sapere la lunghezza di una stringa basta quindi dividere per 2 il numero di bytes; quando hanno sfondato questo limite è nato utf16 (ucs2 esteso per usare 2 o 4 o 6 bytes per carattere), che unisce il peggio dei due mondi (dimensione fissa e variabile).
              Utf32 invece è una character set a dimensione fissa, e rappresenta 232 caratteri; la lunghezza della stringa è data dal numero di bytes diviso per 4.
              Young professional woman and busy mom.
              • Avatar
                ☺
                Scritto da
                avvelentani
                Cubicolario
                il 2014-10-01 21:47:41.0 alle 2014-10-01 21:47:41.0
                Trollate totali: 18184
                Re: SQL : create database : collation
                Scritto da: ::1
                > Scritto da:
                > > E poi perché utf8 e non 16 o 32?
                > > Non ho presente a quali alfabeti si estendano il 16 e il 32, l'8 dovrebbe bastare per tutto ciò che si può scrivere in alfabeto latino.
                >
                > Anche l'alfabeto latino supera gli otto bit in utf8.
                > Infatti essendo un encoding a larghezza del carattere variabile viene usato un byte per l'ascii, e più byte per tutto il resto.
                > Es: in utf8 il carattere 'a ' è la sequenza di bit 01100001; il carattere 'à ' è la sequenza di bit 11000011:10100000.
                > Utf8 quindi può rappresentare tutti i caratteri (oltre un milione ad oggi) utilizzando un numero variabile di bytes, da 1 a 6 per ogni carattere; di conseguenza per sapere la lunghezza di una stringa encodata in utf8 non è sufficiente sapere quanti bytes la compone ma necessita analizzare tutti i bytes per sapere cosa rappresentano.
                > Ucs2 nasce con l'idea di avere tutti i caratteri in due bytes, rappresentando un massimo di 65536; per poter sapere la lunghezza di una stringa basta quindi dividere per 2 il numero di bytes; quando hanno sfondato questo limite è nato utf16 (ucs2 esteso per usare 2 o 4 o 6 bytes per carattere), che unisce il peggio dei due mondi (dimensione fissa e variabile).
                > Utf32 invece è una character set a dimensione fissa, e rappresenta 232 caratteri; la lunghezza della stringa è data dal numero di bytes diviso per 4.

                ci sono alcuni errori qui C-
                I think happiness is love
                - Vladimir Putin
                • Avatar
                  Scritto da
                  Non Autenticato
                  il 2014-10-01 21:54:03.0 alle 2014-10-01 21:54:03.0
                  Re: SQL : create database : collation
                  Scritto da: avvelentani
                  > Scritto da: ::1
                  > > Scritto da:
                  > > > E poi perché utf8 e non 16 o 32?
                  > > > Non ho presente a quali alfabeti si estendano il 16 e il 32, l'8 dovrebbe bastare per tutto ciò che si può scrivere in alfabeto latino.
                  > >
                  > > Anche l'alfabeto latino supera gli otto bit in utf8.
                  > > Infatti essendo un encoding a larghezza del carattere variabile viene usato un byte per l'ascii, e più byte per tutto il resto.
                  > > Es: in utf8 il carattere 'a ' è la sequenza di bit 01100001; il carattere 'à ' è la sequenza di bit 11000011:10100000.
                  > > Utf8 quindi può rappresentare tutti i caratteri (oltre un milione ad oggi) utilizzando un numero variabile di bytes, da 1 a 6 per ogni carattere; di conseguenza per sapere la lunghezza di una stringa encodata in utf8 non è sufficiente sapere quanti bytes la compone ma necessita analizzare tutti i bytes per sapere cosa rappresentano.
                  > > Ucs2 nasce con l'idea di avere tutti i caratteri in due bytes, rappresentando un massimo di 65536; per poter sapere la lunghezza di una stringa basta quindi dividere per 2 il numero di bytes; quando hanno sfondato questo limite è nato utf16 (ucs2 esteso per usare 2 o 4 o 6 bytes per carattere), che unisce il peggio dei due mondi (dimensione fissa e variabile).
                  > > Utf32 invece è una character set a dimensione fissa, e rappresenta 232 caratteri; la lunghezza della stringa è data dal numero di bytes diviso per 4.
                  >
                  > ci sono alcuni errori qui C-

                  Tanto non l'avevo letto perché era troppo lungo Imbarazzato
                • Avatar
                  ☺
                  Scritto da
                  ::1
                  il 2014-10-01 22:02:53.0 alle 2014-10-01 22:02:53.0
                  Trollate totali: 12321
                  Re: SQL : create database : collation
                  Scritto da: avvelentani
                  >
                  > ci sono alcuni errori qui C-

                  Sì, ma ora devi correggerli sennò non vale.
                  Young professional woman and busy mom.
                  • Avatar
                    ☺
                    Scritto da
                    avvelentani
                    Cubicolario
                    il 2014-10-01 22:10:05.0 alle 2014-10-01 22:10:05.0
                    Trollate totali: 18184
                    Re: SQL : create database : collation
                    Scritto da: ::1
                    > Scritto da: avvelentani
                    > >
                    > > ci sono alcuni errori qui C-
                    >
                    > Sì, ma ora devi correggerli sennò non vale.

                    ok

                    > Utf8 quindi può rappresentare tutti i caratteri (oltre un milione ad oggi)

                    i caratteri contenuti in unicode 6.0 sono poco piu` di 100.000, un milione e` il numero massimo di caratteri possibile

                    > da 1 a 6 per ogni carattere

                    da 1 a 4, le sequenze da 5 e 6 caratteri non sono mai valide

                    > quando hanno sfondato questo limite è nato utf16 (ucs2 esteso per usare 2 o 4 o 6 bytes per carattere),

                    utf16 non usa mai (e non potra` mai usare) piu` di 4 bytes (2 unita` di encoding) per codepoint

                    > che unisce il peggio dei due mondi

                    non e` vero, utf16 e` il modo piu` efficiente di rappresentare testo cjk ed e` piu` semplice da implementare rispetto ad utf8. I vantaggi di utf8 sono altri, non hanno certo nulla a che vedere con l'essere a "lunghezza fissa" (i.e. un codepoint per unita` di encoding) perche' questa proprieta` e` sostanzialmente inutile in unicode.
                    I think happiness is love
                    - Vladimir Putin
                    • Avatar
                      ☺
                      Scritto da
                      ::1
                      il 2014-10-01 22:28:29.0 alle 2014-10-01 22:28:29.0
                      Trollate totali: 12321
                      Re: SQL : create database : collation
                      Scritto da: avvelentani
                      > Scritto da: ::1
                      > > Scritto da: avvelentani
                      > > >
                      > > > ci sono alcuni errori qui C-
                      > >
                      > > Sì, ma ora devi correggerli sennò non vale.
                      >
                      > ok
                      >
                      > > Utf8 quindi può rappresentare tutti i caratteri (oltre un milione ad oggi)
                      >
                      > i caratteri contenuti in unicode 6.0 sono poco piu` di 100.000, un milione e` il numero massimo di caratteri possibile
                      >
                      > > da 1 a 6 per ogni carattere
                      >
                      > da 1 a 4, le sequenze da 5 e 6 caratteri non sono mai valide
                      >
                      > > quando hanno sfondato questo limite è nato utf16 (ucs2 esteso per usare 2 o 4 o 6 bytes per carattere),
                      >
                      > utf16 non usa mai (e non potra` mai usare) piu` di 4 bytes (2 unita` di encoding) per codepoint
                      >
                      > > che unisce il peggio dei due mondi
                      >
                      > non e` vero, utf16 e` il modo piu` efficiente di rappresentare testo cjk ed e` piu` semplice da implementare rispetto ad utf8. I vantaggi di utf8 sono altri, non hanno certo nulla a che vedere con l'essere a "lunghezza fissa" (i.e. un codepoint per unita` di encoding) perche' questa proprieta` e` sostanzialmente inutile in unicode.
                      >

                      Nel mondo reale poter avere la lunghezza di una stringa guardando quanto è lunga la sequenza di bytes fa la differenza per alcuni. Ad esempio Java e ruby usano internamente utf16 per vari motivi, principalmente perché avevano scelto ucs2 e si voleva avere la lunghezza della stringa in O(1) invece di O(n); ad oggi si ritrovano con un calcolo della lunghezza della stringa sbagliato (in java dovresti usare Character.codePointCount invece di String.length, ).
                      Oggi si sceglie utf8 perché l'alfabeto latino è lo use case principale; banalmente una pagina html in giapponese avrà caratteri giapponesi solo nei testi, il markup, i fogli di stile e gli script sono sempre quasi completamente ascii.
                      Young professional woman and busy mom.
                      • Avatar
                        ☺
                        Scritto da
                        avvelentani
                        Cubicolario
                        il 2014-10-01 22:33:50.0 alle 2014-10-01 22:33:50.0
                        Trollate totali: 18184
                        Re: SQL : create database : collation
                        Scritto da: ::1
                        > Scritto da: avvelentani
                        > > Scritto da: ::1
                        > > > Scritto da: avvelentani
                        > > > >
                        > > > > ci sono alcuni errori qui C-
                        > > >
                        > > > Sì, ma ora devi correggerli sennò non vale.
                        > >
                        > > ok
                        > >
                        > > > Utf8 quindi può rappresentare tutti i caratteri (oltre un milione ad oggi)
                        > >
                        > > i caratteri contenuti in unicode 6.0 sono poco piu` di 100.000, un milione e` il numero massimo di caratteri possibile
                        > >
                        > > > da 1 a 6 per ogni carattere
                        > >
                        > > da 1 a 4, le sequenze da 5 e 6 caratteri non sono mai valide
                        > >
                        > > > quando hanno sfondato questo limite è nato utf16 (ucs2 esteso per usare 2 o 4 o 6 bytes per carattere),
                        > >
                        > > utf16 non usa mai (e non potra` mai usare) piu` di 4 bytes (2 unita` di encoding) per codepoint
                        > >
                        > > > che unisce il peggio dei due mondi
                        > >
                        > > non e` vero, utf16 e` il modo piu` efficiente di rappresentare testo cjk ed e` piu` semplice da implementare rispetto ad utf8. I vantaggi di utf8 sono altri, non hanno certo nulla a che vedere con l'essere a "lunghezza fissa" (i.e. un codepoint per unita` di encoding) perche' questa proprieta` e` sostanzialmente inutile in unicode.
                        > >
                        >
                        > Nel mondo reale poter avere la lunghezza di una stringa guardando quanto è lunga la sequenza di bytes fa la differenza per alcuni.

                        Per chi? Fammi un esempio dov'e` utile sapere la lunghezza di una stringa come numero di codepoint nel mondo reale.

                        > Oggi si sceglie utf8 perché l'alfabeto latino è lo use case principale; banalmente una pagina html in giapponese avrà caratteri giapponesi solo nei testi, il markup, i fogli di stile e gli script sono sempre quasi completamente ascii.

                        non solo, utf8 e` autosincronizzante, non ha problemi di endianness e se ti accontenti puoi far finta che sia un semplice encoding a 8 bit e tutto funziona.
                        I think happiness is love
                        - Vladimir Putin
<softv>

Pagina generata in 142 millisecondi

Utenti attivi: 7 nell'ultimo minuto, 17 negli ultimi cinque minuti, 40 negli ultimi 15 minuti