ursus contionabundo: Zu php: uniqid() vers. mysql uuid()

Beitrag lesen

Danke erstmal für die Klarstellung:

$pits_uid = uniqid();

Also etwas wie "5819f3ad1c0ce". Hoffentlich hast Du die Warnungen gelesen. Um sicher zu gehen solltest Du nämlich einen ausreichend großen Zufallswert "anhängen". Allerdings sind die Reserven dafür (maximal 9223372036854775807 / 4503599627370495 = 2048) klein, wie das schnelle Beispiel zeigt:

<?php
# echo "<pre>";
$uid = uniqid();
echo "UID:           " . $uid . "\n";
echo "Max INT:       " . PHP_INT_MAX . "\n";
echo "PHP max float: " . "99999999999999" ."\n";
echo "Max UUID:      " . "fffffffffffff" . "\n";
echo "(hexdec)       " . hexdec("fffffffffffff") ."\n";
echo "mysql max int: " . "4294967295" . "\n";
echo "UID.dec:       " . hexdec($uid) . "\n";
echo "Reserve:       " . PHP_INT_MAX / hexdec("fffffffffffff") . "\n";

Auf 32-Bit-Systemen geht das gar nicht vernünftig, da PHP_INT_MAX = 2147483647 und viel zu klein ist.

Aber allgemein gesagt kannst Du also hexdec benutzen und in MySQL den Datentyp BIGINT.

Falls Du (wegen der Warnungen) eine UUID willst.

  • Bilde die UUID in MySQL, trage aber den binären Wert in die Datenbank ein. Spaltentyp ist row binary, Länge ist 16:
CREATE TABLE table ( col binary(16) PRIMARY KEY );
INSERT INTO table ( col ) VALUES ( UUID_BIN( UUID() ) );

Anzeigbar Lesen:

SELECT BIN_UUD( col ) FROM table LIMIT 1;

Selektieren anhand UUID:

SELECT * FROM table WHERE col = UUID_BIN( "586bcc2d-9a96-11e6-852c-4439c456d444" );

Große Geheimnisse für PHP auf Linux:

<?php

if ( is_file ('/proc/sys/kernel/random/uuid') ) {
    $UUID = file_get_contents('/proc/sys/kernel/random/uuid'); #hex
) else if ( is_file ( '/usr/bin/uuid' ) ) {
    $UUID = `/usr/bin/uuid`; #hex
    $UUID_BIN = `/usr/bin/uuid -F bin`; # binary!
    $UUID_SIV = `/usr/bin/uuid -F siv`; # to long for real php-integer -> string
) else {
    trigger_error( 'try to use a own funktion, eg: https://stackoverflow.com/questions/2040240/php-function-to-generate-v4-uuid', E_USER_ERROR );
}
0 40

mysql: Zeitfresser

Pit
  • sql
  1. 0
    dedlfix
    1. 0
      Pit
      1. 0
        dedlfix
        1. 1
          Pit
        2. 0

          +1 bitte

          ursus contionabundo
          1. 0
            Matthias Apsel
            1. 0
              TS
              • menschelei
              • projekt
              • zu diesem forum
              1. 0
                Matthias Apsel
      2. 0
        Rolf B
        1. 0
          Pit
  2. 0
    ursus contionabundo
    1. 0
      Pit
      1. 1
        ursus contionabundo
        1. 0
          Pit
          1. 0
            TS
            • mysql
        2. 0
          Rolf B
          1. 0
            ursus contionabundo
            1. 0
              Rolf B
              1. 0

                Harangue

                ursus contionabundo
                • humor
      2. 0
        ursus contionabundo
        • php
        • sql
        • webserver
      3. 0

        Unique Identifier Symbolvorrat.

        TS
        • php
        • sql
        1. 0
          dedlfix
          1. 0
            ursus contionabundo
          2. 0
            Pit
            1. 0

              Zu php: uniqid() vers. mysql uuid()

              ursus contionabundo
              1. 0

                Für die Geschichtsschreibung:

                ursus contionabundo
                • geschichte
                • sonstiges
              2. 0

                Korrektur: "Kleiner" Denkfehler

                ursus contionabundo
              3. 1
                dedlfix
                1. 0
                  ursus contionabundo
              4. 0
                Auge
          3. 0
            TS
            • cloud
            • php
            • sql
            1. 0
              dedlfix
              1. 0
                TS
                • cloud
                • offtopic
                1. 0
                  dedlfix
                  1. 0
                    TS
                    1. 0
                      dedlfix
    2. 0

      Welcher Ordinaltyp für einen Index?

      TS
      • mysql
      1. 0

        Theorie vers. Praxis

        ursus contionabundo
        1. 0
          ursus contionabundo